3

何らかの理由で、このコードを使用して 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);
        }
4

1 に答える 1

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

これにより、表示されなかったフィールドの値のタイプを確認できます。

于 2013-04-06T05:11:20.810 に答える