阅读条目从Access数据库进入DataGridView中使用C#

问题描述:

出于某种原因,当我尝试使用此代码从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); 
     } 

我建议你在调试器中试试你的代码,这样你就可以看到发生了什么。我的第一个猜测是你的数字字段不会以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