0

これは私が達成しようとしているものです:

「item_code」という名前の列があるデータベースにテーブルがあります。

このテーブルにクエリを実行して、一度に 1 行ずつ返す必要があります。ここで、列「item_code」の値を使用して、返された 1 つの行を別のテーブルにクエリし、そこで一連の行をフェッチする必要があります。どうすればいいですか?

while ループで datareader オブジェクトを使用して、一度に 1 行をフェッチしてから、このループ内で他のテーブルにクエリを実行して必要な行をフェッチしようとしましたが、このデータをグリッドビューに配置する方法がわかりませんでした (datatable を使用しますか?はいの場合、どのように?) while ループの各反復後にグリッドビューの前の行が消去されないようにします。

データをグリッドビューに入れる唯一の方法は .Fill() を使用することですが、この場合、グリッドビューの以前のエントリが消去されるため、明らかに Fill メソッドは機能しません。

助けてください。

4

3 に答える 3

2

次のように、SQLレベルでワンステップで作成できます。

SELECT Table2.* 
FROM Table2
INNER JOIN Table1 ON Table1.item_code = Table2.item_code
ORDER BY Table2.item_code

もちろん、より小さなリストを作成する必要がある場合は、それを作成することもできWHEREます。

于 2012-09-08T11:39:02.317 に答える
2

このテーブルにクエリを実行して、一度に 1 行ずつ返す必要があります。ここで、列「item_code」の値を、返された 1 つの行に使用して、一連の行をフェッチするために使用する別のテーブルにクエリを実行する必要があります。どうすればいいですか?

「item_code」で 2 つのテーブルを結合し、2 番目のテーブルから結果を取得する単一の SQL クエリを使用できます。

于 2012-09-08T11:35:57.113 に答える
2

あなたのソリューションは機能しますが、正しいです。 Fill() はテーブルの内容を消去します。代わりに、Merge() を使用します

var myMainTable = new DataTable();

foreach(var itemId in itemIds)
{
  var currentTable = new DataTable();
  // submit new query
  myAdapter.Fill(currentTable)
  myMainTable.Merge(currentTable);
}
于 2012-09-08T11:36:26.530 に答える