Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从listview传输到listbox并更新SQL Server数据库_C#_Sql Server_Winforms_Listview_Listbox - Fatal编程技术网

C# 从listview传输到listbox并更新SQL Server数据库

C# 从listview传输到listbox并更新SQL Server数据库,c#,sql-server,winforms,listview,listbox,C#,Sql Server,Winforms,Listview,Listbox,我有一个表单,它使用SQL查询将数据从listview传输到listbox。我没有错误,SQL代码正在读取查询并将数据从listview传输到listbox正在工作,但我的SqlCommand似乎没有运行/更新我的datagridview。我不知道这是否是放置SqlCommand的正确位置-请帮助我解决此问题 for (int intCount = 0; intCount < listViewOrders.Items.Count; intCount++) { listBoxInvo

我有一个表单,它使用SQL查询将数据从
listview
传输到
listbox
。我没有错误,SQL代码正在读取查询并将数据从
listview
传输到
listbox
正在工作,但我的
SqlCommand
似乎没有运行/更新我的
datagridview
。我不知道这是否是放置
SqlCommand
的正确位置-请帮助我解决此问题

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();
for(int-intCount=0;intCount

先谢谢你。欢迎任何类型的回复。

我认为这在您的查询中是一个空格,特别是在
WHERE
子句中

这样做:

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($@"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参数来避免SQL注入,效果会更好


您在运行时是否有任何错误?@JericCruz到目前为止没有错误,但它没有更新productQuantity-您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入-检查您只是定义了
cmd
-但您从未执行(运行)它。。。。。您需要使用
cmd.ExecuteNonQuery()
(在调用
connect.Close()
之前)来实际运行该代码……非常感谢。我只是忘记了cmd.ExecuteNonQuery();还有一件事,先生。如何更新按钮上的datagridview?我正在使用dataGridView.Refresh();和更新();但什么都不管用。萨乌利廷爵士。Maraming salamat您可以首先更新绑定到datagrid的数据源,然后执行
dataGridProd.Refresh()
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();