2017-09-03 74 views
0

我有一個表單,使用SQL查詢將數據從listview傳輸到listbox。我沒有錯誤,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/zh-cn/library/ms161953%28v=sql.105%29.aspx) - 你應該**不**連接你的SQL語句 - 使用**參數化查詢**來代替以避免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有一個值。你可以添加一個斷點來檢查它。

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

如果使用SQL參數來好多了避免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

還有一件事先生。如何更新按鈕上的datagridview?我正在使用dataGridView.Refresh();和Update();但沒有任何工作。爵士先生。 Maraming salamat – vicserna1997

+0

您可以先更新綁定到datagrid的數據源,然後執行'dataGridProd.Refresh()'。 –