0

これが今の私のコードです:

OleDbCommand cmd1 = new OleDbCommand("SELECT * FROM Id, Number", cn);
OleDbDataReader reader = cmd1.ExecuteReader();
while( reader.Read() )
{
    results.Add((int)reader["Id"], (int)reader["Number"]);
}

IdとNumberは、Excelファイルの名前付き範囲です。dictionary<int, int>このクエリの結果でを返そうとしています。

問題は、その行reader["Id"]が例外をスローしていることです。結果セットをデバッグすると、Idの値が正しいことがわかります。データを誤って取得していますか?

ボーナス: Numberがnullでない行のみを返す必要もあります。where Number is not nullOldDbCommandに追加できることを望んでいましたが、それでも例外が発生しました。

私がここで間違っていることを皆さんが見ることができるものは何ですか?

ありがとう!

4

1 に答える 1

0

David Wのコメントは正しかった。同じラインでキャストできませんでした。また、通話reader["Id"]が機能していませんでした。に置き換えてReader[0]、すべてがうまく機能します。

OleDbCommand cmd1 = new OleDbCommand("SELECT * from Number, Id", cn);
OleDbDataReader reader = cmd1.ExecuteReader();

while( reader.Read() )
{
   var Number= reader[0];
   var Id = reader[1];

   if(Id == DBNull.Value || WoNumber == DBNull.Value)
   {
       break;
   }

   results.Add(Convert.ToInt32(Id), Convert.ToInt32(Number));
}
于 2012-08-29T14:49:35.777 に答える