我希望将所有行从列表视图更新到数据库,因此,我为字符串数据定义了字符串变量,为浮点数据定义了双变量,然后运行一个循环将所有数据从列表视图获取到变量,但执行失败。
int pro_sl_no=0;
string pro_specification="";
int Pro_qty = 0 ;
string Pro_unit="";
double pro_rate=0 ;
double pro_amnt=0;
double pro_gst=0;
double pro_gst_amnt=0;
double pro_net_amnt=0;
for (int i = 0; i < listView_pro.Items.Count; i++)
{
pro_sl_no = Convert.ToInt32(listView_pro.Items[i].SubItems[0].Text);
pro_specification = Convert.ToString(listView_pro.Items[i].SubItems[1].Text);
Pro_qty = Convert.ToInt32(listView_pro.Items[i].SubItems[2].Text);
Pro_unit = Convert.ToString(listView_pro.Items[i].SubItems[3].Text);
pro_rate = Convert.ToDouble(listView_pro.Items[i].SubItems[4].Text);
pro_amnt = Convert.ToDouble(listView_pro.Items[i].SubItems[5].Text);
pro_gst = Convert.ToDouble(listView_pro.Items[i].SubItems[6].Text);
pro_gst_amnt = Convert.ToDouble(listView_pro.Items[i].SubItems[7].Text);
pro_net_amnt = Convert.ToDouble(listView_pro.Items[i].SubItems[8].Text);
string sql="";
sql += "update productADD set SL_NO=["pro_sl_no"],ro_specifi=["pro_specification"],pro_qty=["pro_qty"],pro_unit=["pro_unit"],pro_rate=["pro_rate"],pro_amo=["pro_amnt"],pro_gst=["pro_gst"],pro_gst_amo=["pro_gst_amnt"],total=["Pro_net_amnt"] where auto_no='"+txt_autoNo.Text.Trim()+"',addressee='"+txt_addressee.Text+"'";
cmd.Connection = con;
cmd.ExecuteNonQuery();
}发布于 2019-08-31 16:34:05
您不应该将sql语句嵌入到这样的代码中,您将自己暴露在sql注入攻击之下,并且在每次循环迭代时都会打开一个新的数据库连接。
相反,您应该使用ORM,比如EntityFramework,或者使用单独的DataLayer与数据库中的存储过程进行交互。
而且,像这样声明SQL变量是没有意义的: string sql="";,然后在下面一行中更新它。
有关如何使用stredproc实现更新的示例,请参考以下内容,因此答案是:Executing an update stored procedure in C#
https://stackoverflow.com/questions/57735818
复制相似问题