簡體   English   中英

使用C#從Access數據庫讀入條目到DataGridView

[英]Reading Entries From Access Database Into DataGridView Using C#

出於某種原因,當我嘗試使用此代碼從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);
        }

我建議你嘗試在調試器中單步執行代碼,這樣你就可以看到發生了什么。 我的第一個猜測是你的數字字段不會返回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();
            }

這將讓您看到未顯示的字段中的值類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM