2016-05-04 5 views
-1
を読みながら、SQLエラーを取得
SqlCommand cmd = new SqlCommand("SELECT * FROM Products",con); 
SqlDataReader reader = cmd.ExecuteReader(); 

while (reader.Read()) 
{ 
    if (reader["ProductName"].ToString() == "dsd") 
    { 
     SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Products", con); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 

     ListView1.DataSource = ds; 
     ListView1.DataBind(); 
    } 
} 

reader.Close(); 

エラー:データ

すでに私は、この行da.fill(ds)にエラーを取得しています

最初に閉じる必要があります。このコマンドに関連付けられているオープンのDataReader。そして私はレコードを読むにはSqlCommandと、レコードを見るには2番目のコマンドSqlDataAdapterを使用しました。

+4

'reader.Read()'はデータの読み込みを開始し、 'da.Fill(ds);'は読み込みを再開します。しかし、このコードで何を達成しようとしていますか(それは意味をなさない)。 –

+0

ああ、それは同じクエリです。だから彼が100の製品を持っているなら、地獄は製品テーブル全体を1 + 100回読む。 –

+0

このコードは意味がありません。達成しようとしていることを説明してください。 – Fred

答えて

-1

2つの接続オブジェクトが必要です。 1つは公開データリーダー用、もう1つはSqlDataAdapterで使用するためのものです。

(それとも、MARSを使用することができますが、本当にそれだけで2番目の接続を開くためにはるかに良いです。)

+0

実際にはありません。ちょうど壊れたコードを修正するのに役立ちます。 – TomTom

+1

これは、エラーメッセージに関する質問に対する正しい答えです。彼のサンプルコードが無意味であっても、同じ質問を持つ次の人は、ループ内でクエリを正当に実行する必要があります。 –

+0

実際に2つのステートメントを同時に実行する場合は、正しい答えです。ほとんどの場合、適切な答えは最初の読者を閉じることです。 – TomTom

0

私が正しくあなたの問題を理解していれば、あなたは「名前ですべての製品でListViewコントロールをバインドする必要がありますdsd "

これが正しければ、次のようなSQLクエリ変更することができます。製品からの SELECT *をWHERE商品名=「DSD」

あなたはDataReaderオブジェクトからの応答を読んで、あなたのリストビューにバインドするリストを準備することができますコントロール。私はリストビューコントロールにバインドするDataSetが必要とは思わない。