2012-01-11 20 views
1

FbDataReaderからArrayListにデータをプッシュしようとしています。ここに私のサンプルコードです:FbDataReaderからC#のArrayListへ

ArrayList aList = new ArrayList(); 
FbCommand fbCommand = new FbCommand("SELECT * FROM users", dbConn); 
FbDataReader fbDataReader = fbCommand.ExecuteReader(); 
while (fbDataReader.Read()) { 
    aList.Add(fbDataReader[0]); 
    // Should push all the fbDataReader (including rows and columns) into the aList array 
} 
fbDataReader.Close(); 
return aList; 
+0

問題がありますか? –

+0

何が問題なのですか? –

+0

"fbDataReader [0]"は行全体を返しません。現在の行の最初の列の値だけを返します。 – Abbas

答えて

4

あなたのコードにコメントとして質問を入れないでください。それはそれを見つけるのが難しくなります。

IDataRecord(データリーダーが実装する)のメソッドGetValues()を使用できます。

var users = FindUsers(); 
var value = users[rowIndex][columnIndex].ToString(); 
+0

GetValues()のしくみを知りませんか? GetValuesが動作するために、何かをインポートするか、別の参照を追加する必要がありますか?私はメッセージ 'メソッドのためのオーバーロードはありません' GetValuesは0引数を取る ' – Ourx

+0

私はコードを更新しました。私もすべてをきれいにし、コードdbドライバを独立させました。 – jgauffin

+0

@Ourx:それはあなたの問題を解決しましたか? – jgauffin

1

DataReader.GetValuesメソッドは、引数として渡されたオブジェクト配列に行のすべての値をコピーします。後で使用することができます

public IList<object[]> FindUsers() 
{ 
    using (var command = dbConn.CreateCommand()) 
    { 
     command.CommandText = "SELECT * FROM users"; 
     using (var reader = command.ExecuteReader()) 
     { 
      var rows = new List<object[]>(); 
      while (reader.Read()) 
      { 
       var columns = new object[reader.FieldCount]; 
       reader.GetValues(columns); 
       rows.Add(columns); 
      } 
      return rows; 
     } 
    } 
} 

。オブジェクトリストをArrayListに追加することができます。

Object[] values = new Object[fbDataReader.FieldCount]; 
fbDataReader.GetValues(values) 
aList.Add(values);