我用C#写了一个SQL保存的语句。但是update时,出现错误了。
写了一个保存的语句。当不存在danh时,用insert插入记录,当存在danh时,执行update。为什么没错执行update时,只能把dataGridView1表最后的...
写了一个保存的语句。当不存在danh时,用insert插入记录,当存在danh时,执行update。为什么没错执行update时,只能把dataGridView1表最后的一条数据全部更新了?图一为保存dataGridView1的数据,第一次保存是insert的。第2次点保存是update时出错,全部替代为图2了。
图2
本来是保存两条不同的数据的,为什么update时,两条更新为dataGridView1里最后的一条了。
代码如下。
for (int y = 0; y < z; y++)
{
//------保存到SJZL_ERP_BCPRK半成品入库明细表----
sdr3.Close();
string rk = "update SJZL_ERP_BCPRK set tm='" + dataGridView1.Rows[y].Cells[1].Value + "',bcpmc='" + dataGridView1.Rows[y].Cells[3].Value + "',shul='" + dataGridView1.Rows[y].Cells[4].Value + "',jt='" + dataGridView1.Rows[y].Cells[5].Value + "',jtbm='" + dataGridView1.Rows[y].Cells[6].Value + "',guig='" + dataGridView1.Rows[y].Cells[7].Value + "',leib='" + dataGridView1.Rows[y].Cells[8].Value + "',zhongl='" + dataGridView1.Rows[y].Cells[9].Value + "',qita='" + textBox5.Text.Trim() + "'";
SqlCommand cmd = new SqlCommand(rk, con);
cmd.ExecuteNonQuery();
} 展开
图2
本来是保存两条不同的数据的,为什么update时,两条更新为dataGridView1里最后的一条了。
代码如下。
for (int y = 0; y < z; y++)
{
//------保存到SJZL_ERP_BCPRK半成品入库明细表----
sdr3.Close();
string rk = "update SJZL_ERP_BCPRK set tm='" + dataGridView1.Rows[y].Cells[1].Value + "',bcpmc='" + dataGridView1.Rows[y].Cells[3].Value + "',shul='" + dataGridView1.Rows[y].Cells[4].Value + "',jt='" + dataGridView1.Rows[y].Cells[5].Value + "',jtbm='" + dataGridView1.Rows[y].Cells[6].Value + "',guig='" + dataGridView1.Rows[y].Cells[7].Value + "',leib='" + dataGridView1.Rows[y].Cells[8].Value + "',zhongl='" + dataGridView1.Rows[y].Cells[9].Value + "',qita='" + textBox5.Text.Trim() + "'";
SqlCommand cmd = new SqlCommand(rk, con);
cmd.ExecuteNonQuery();
} 展开
3个回答
展开全部
很简单,你在update的时候,没有指定指定where中的id,假定你的图二中的bcprkid是唯一的序号,假定你要更新bcprkid为41的那条,那你在update的时候,语句就应该类似于update table1 set f1=v1,f2=v2 where bcprkid=41
追问
问题是不知道bcprkid啊,不能更加一条数据,查看一次那里的bcprkid然后再指定吧。求帮改sql语句。我把更新语句贴上去了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-07-10
展开全部
就是因为update 的更新的是全部,如果想正常更新,就需要加一个字段,用来表示每条记录的唯一性的,且在数据库中,这个字段是不能为空的。比如你的bcprkid。首先你要在插入之前,生成这个bcprkid字段 的值,这样更新时,datagridview中是有这个值的。不需要去数据库读取。
追问
但是我写的是winfrom下的,难道每次要查了SQL里的数据再继续指定字段啊?
追答
不需要啊。你每次的数据都查出来,bcprkid它也查出来。只是在显示的时候不显示。这样就可以直接去更新了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SQL语句:
string rk = "update SJZL_ERP_BCPRK set tm='" + dataGridView1.Rows[y].Cells[1].Value + "',bcpmc='" + dataGridView1.Rows[y].Cells[3].Value + "',shul='" + dataGridView1.Rows[y].Cells[4].Value + "',jt='" + dataGridView1.Rows[y].Cells[5].Value + "',jtbm='" + dataGridView1.Rows[y].Cells[6].Value + "',guig='" + dataGridView1.Rows[y].Cells[7].Value + "',leib='" + dataGridView1.Rows[y].Cells[8].Value + "',zhongl='" + dataGridView1.Rows[y].Cells[9].Value + "',qita='" + textBox5.Text.Trim() + "' where tm="'+dataGridView1.Rows[y].Cells[1].Value +'";
没运行过可能有错误,核心就是缺少条件:where tm=需要更新的货物的条形码。
好久没用字符串拼接了,看着有点乱
string rk = "update SJZL_ERP_BCPRK set tm='" + dataGridView1.Rows[y].Cells[1].Value + "',bcpmc='" + dataGridView1.Rows[y].Cells[3].Value + "',shul='" + dataGridView1.Rows[y].Cells[4].Value + "',jt='" + dataGridView1.Rows[y].Cells[5].Value + "',jtbm='" + dataGridView1.Rows[y].Cells[6].Value + "',guig='" + dataGridView1.Rows[y].Cells[7].Value + "',leib='" + dataGridView1.Rows[y].Cells[8].Value + "',zhongl='" + dataGridView1.Rows[y].Cells[9].Value + "',qita='" + textBox5.Text.Trim() + "' where tm="'+dataGridView1.Rows[y].Cells[1].Value +'";
没运行过可能有错误,核心就是缺少条件:where tm=需要更新的货物的条形码。
好久没用字符串拼接了,看着有点乱
更多追问追答
追问
写where的话,不知道bcprkid的号。
追答
你那张表的字段tm是唯一的吗? 我觉得问题描述得还不是很清楚。要么你把dataGridView的第一列换成数据表中的bcprkid,这样就容易了。 就是不知道你想更新的行是按条形码进行更新,还是按行ID进行更新
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询