2017-09-03 12 views
0

私はlistviewからlistboxへのデータをSQLクエリで転送するフォームを持っています。エラーがなく、SQLコードがクエリを読み込んでいて、listviewからlistboxにデータを転送していますが、私のSqlCommandは実行中ではない/私のdatagridviewを更新しているようです。これが正しい場所であるかどうかわかりませんSqlCommand - これを解決するのを手伝ってください。リストビューからリストボックスへの転送とSQL Serverデータベースの更新

for (int intCount = 0; intCount < listViewOrders.Items.Count; intCount++) 
{ 
    listBoxInvoice.Items.Add(listViewOrders.Items[intCount].Text); 
    listBoxInvoice.Items.Add("        x" + listViewOrders.Items[intCount].SubItems[2].Text + 
          "     @    " + listViewOrders.Items[intCount].SubItems[1].Text); 

    connect.Open(); 

    SqlCommand cmd = new SqlCommand("UPDATE tblProducts SET productQuantity = productQuantity - " + 
          listViewOrders.Items[intCount].SubItems[2].Text + "WHERE productName = '" + listViewOrders.Items[intCount].Text + "'", connect); 

    connect.Close(); 
} 

dataGridProd.Update(); 
dataGridProd.Refresh(); 

ありがとうございます。どんなタイプの応答も高く評価されています。

+0

あなたが実行時にすべてのエラーを持っていますか? –

+0

@JericCruzこれまでのエラーはありませんが、productQuantityを更新していません – vicserna1997

+1

[SQLインジェクション警告](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - SQLインジェクションを回避するために、代わりに**パラメータ化されたクエリ**を使用してください - [Little Bobby Tables](https://xkcd.com/327/)をチェックしてください –

答えて

1

私はそれが具体的にWHERE句であなたのクエリの間隔と思います。

enter image description here

だから、このようにそれを実行します。

SqlCommand cmd = new SqlCommand("UPDATE tblProducts SET productQuantity = productQuantity - " + listViewOrders.Items[intCount].SubItems[2].Text + " WHERE productName = '" + listViewOrders.Items[intCount].Text + "'", connect); 
cmd.ExecuteNonQuery(); 

か、文字列の補間を使用し、その後+ C#6を使用している場合。

var cmd = new SqlCommand([email protected]"UPDATE tblProducts SET productQuantity = productQuantity - {listViewOrders.Items[intCount].SubItems[2].Text} WHERE productName = '{listViewOrders.Items[intCount].Text}'", connect); 
cmd.ExecuteNonQuery(); 

は、あなたがデータを 更新しているので、ExecuteNonQueryを使用して、それを実行することを忘れないでください。

そして、listViewOrders.Items[intCount].Textに値が設定されていることを確認してください。チェックするためにブレークポイントを追加することができます。あなたがSQLパラメータを使用している場合

=============== UPDATE ================

はるかに良いですSQLインジェクションを避ける。

SqlCommand cmd = new SqlCommand("UPDATE tblProducts SET productQuantity = productQuantity - @quantity WHERE productName = @productName", connect); 
cmd.Parameters.AddWithValue("@quantity", listViewOrders.Items[intCount].SubItems[2].Text); 
cmd.Parameters.AddWithValue("@productName", listViewOrders.Items[intCount].Text); 
cmd.ExecuteNonQuery(); 
+0

ありがとうございます。私はcmd.ExecuteNonQuery();を忘れてしまった。 – vicserna1997

+1

もう1つのことです。ボタンでDataGridViewを更新するにはどうしたらいいですか?私はdataGridView.Refresh()を使用しています。とUpdate();しかし、何も動作しません。サー・ウリチン。 Maram Salamat – vicserna1997

+0

あなたのデータグリッドにバインドされているデータソースを最初に更新し、 'dataGridProd.Refresh()'を実行することができます。 –

関連する問題