while(dr.Read()){...}
を使用できることはわかっていますが、それはテーブルのすべてのフィールドをループし、最初の行からすべての値を取得してから、2番目...のように取得します。
次のようなテーブルがあるとします。
ID--------------Value1--------------Value2------------------Value3
1 hello hello2 hello3
2 hi1 hi2 hi3
最初に取得したい、hello
、hello2
およびhello3
その後、2行目に移動してすべての値を取得します。
これを達成する方法はありますか?誰かが私の言っていることを理解してくれることを願っています。
申し訳ありませんが、これは現在解決されています。私は正しくコーディングしていませんでした...
そして、そうそうSqlDataReader.Read()メソッドは、それがするはずのことを行います、再び間違いは私のものでした。
これがDataReader
の動作方法であり、データベース行を一度に1つずつ読み取るように設計されています。
while(reader.Read())
{
var value1 = reader.GetValue(0); // On first iteration will be hello
var value2 = reader.GetValue(1); // On first iteration will be hello2
var value3 = reader.GetValue(2); // On first iteration will be hello3
}
int count = reader.FieldCount;
while(reader.Read()) {
for(int i = 0 ; i < count ; i++) {
Console.WriteLine(reader.GetValue(i));
}
}
注意;複数のグリッドがある場合:
do {
int count = reader.FieldCount;
while(reader.Read()) {
for(int i = 0 ; i < count ; i++) {
Console.WriteLine(reader.GetValue(i));
}
}
} while (reader.NextResult())
または、名前で直接列にアクセスしてみることができます。
while(dr.Read())
{
string col1 = (string)dr["Value1"];
string col2 = (string)dr["Value2"];
string col3 = (string)dr["Value3"];
}
「行全体」を一度に取得する方法はありません。行をループする必要があり、行ごとに各列を個別に読み取る必要があります。
using(SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
string value1 = rdr.GetString(0);
string value2 = rdr.GetString(1);
string value3 = rdr.GetString(2);
}
}
各行で読み取る文字列をどのように処理するかは完全にあなた次第です-定義したクラスなどに保存できます。
C#のデータリーダーで行をループするにはどうすればよいですか?
IDataReader.Read()
は、リーダーを結果セットの次の行に進めます。
_while(reader.Read()){
/* do whatever you'd like to do for each row. */
}
_
したがって、ループの反復ごとに、0から_reader.FieldCount
_までの別のループを実行し、各フィールドに対してreader.GetValue(i)
を呼び出します。
より大きな問題は、そのデータを保持するためにどのような構造を使用したいかです。
実際には、結果セット内のレコードを反復処理するRead
メソッド。あなたの場合-テーブルの行の上。だから、あなたはまだそれを使用することができます。
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
subjob.Items.Add(dr[i]);
}
}
1列の行を読み取る