我用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();
}
展开
 我来答
syht2000
高粉答主

2012-07-10 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
很简单,你在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它也查出来。只是在显示的时候不显示。这样就可以直接去更新了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
942129263
2012-07-10 · TA获得超过364个赞
知道小有建树答主
回答量:262
采纳率:0%
帮助的人:142万
展开全部
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=需要更新的货物的条形码。
好久没用字符串拼接了,看着有点乱
更多追问追答
追问
写where的话,不知道bcprkid的号。
追答
你那张表的字段tm是唯一的吗?  我觉得问题描述得还不是很清楚。要么你把dataGridView的第一列换成数据表中的bcprkid,这样就容易了。  就是不知道你想更新的行是按条形码进行更新,还是按行ID进行更新
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式