阅读条目从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();
}
,将让你看到的是在没有得到显示的字段值的类型。
我收到了一堆System.Single数据类型。 – 2013-04-06 08:10:21
很好,@Emily,Single是一种浮点数,所以你只需要检查这个类型并正确地转换它。 – 2013-04-07 04:56:51
您可能还想阅读[数据绑定](http://msdn.microsoft.com/en-us/library/ms752347.aspx),@Emily。这是将数据从数据库移动到您的显示器的更强大的方法。 – 2013-04-07 04:58:47