使用c#从Access数据库读取条目到DataGridView

本文关键字:DataGridView 读取 数据库 Access 使用 | 更新日期: 2023-09-27 18:07:35

由于某种原因,当我尝试使用此代码从Access数据库读取数字时,我只是在数据网格中获得空白条目。我可以很好地读取字符串。有人知道这是为什么吗?是的,Access中未读条目的实际数据类型是NUMBER。

        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);
        }

使用c#从Access数据库读取条目到DataGridView

我建议您尝试在调试器中逐步执行您的代码,以便您可以看到发生了什么。我的第一个猜测是,您的数字字段没有作为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();
            }

这将让您看到字段中没有显示的值的类型