2013-04-06 60 views
3

出於某種原因,當我嘗試使用此代碼從Access數據庫中的數字閱讀,我只是得到我的數據網格空白項。我可以很好地閱讀字符串。任何人都知道這可能是爲什麼?是的,Access中未讀條目的實際數據類型是NUMBER。閱讀條目從Access數據庫進入DataGridView中使用C#

 string strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Employees.mdb"; 
     string strSql = "SELECT * FROM tbl_employees"; 
     OleDbConnection con = new OleDbConnection(strProvider); 
     OleDbCommand cmd = new OleDbCommand(strSql, con); 
     con.Open(); 
     cmd.CommandType = CommandType.Text; 
     OleDbDataReader dr = cmd.ExecuteReader(); 

     int columnCount = dr.FieldCount; 

     for (int i = 0; i < columnCount; i++) 
     { 
      dgv.Columns.Add(dr.GetName(i).ToString(), dr.GetName(i).ToString()); 
     } 

     string[] rowData = new string[columnCount]; 
     while (dr.Read()) 
     { 
      for (int k = 0; k < columnCount; k++) 
      { 
       if (dr.GetFieldType(k).ToString() =="System.Int32") 
       { 
        rowData[k] = dr.GetInt32(k).ToString(); 
       } 

       if (dr.GetFieldType(k).ToString() == "System.String") 
       { 
        rowData[k] = dr.GetString(k); 
       } 
      } 

      dgv.Rows.Add(rowData); 
     } 

回答

1

我建議你在調試器中試試你的代碼,這樣你就可以看到發生了什麼。我的第一個猜測是你的數字字段不會以Int32的形式返回,也許它們是浮動或小數。

如果由於某種原因,你無法通過它步驟,嘗試這樣的事情:

  if (dr.GetFieldType(k).ToString() =="System.Int32") 
      { 
       rowData[k] = dr.GetInt32(k).ToString(); 
      } 
      else if (dr.GetFieldType(k).ToString() == "System.String") 
      { 
       rowData[k] = dr.GetString(k); 
      } 
      else 
      { 
       rowData[k] = dr.GetFieldType(k).ToString(); 
      } 

,將讓你看到的是在沒有得到顯示的字段值的類型。

+0

我收到了一堆System.Single數據類型。 – 2013-04-06 08:10:21

+0

很好,@Emily,Single是一種浮點數,所以你只需要檢查這個類型並正確地轉換它。 – 2013-04-07 04:56:51

+0

您可能還想閱讀[數據綁定](http://msdn.microsoft.com/en-us/library/ms752347.aspx),@Emily。這是將數據從數據庫移動到您的顯示器的更強大的方法。 – 2013-04-07 04:58:47