违反并发性: UpdateCommand 影响了预期1 条记录中的0 条(暂时只有20分了,赚分后加,见谅)
在做一个表格的添加与更新,发现添加记录保存没问题,编辑已有记录后保存也没问题
但是如果编辑新添加的记录则报错:
违反并发性: UpdateCommand 影响了预期1 条记录中的0 条
数据结构如下:
- SQL code
create table tb_POLine ( POLineID int identity, POID int not null, GoodsID int not null, Qty int not null, LineDesc vchar(128) null, constraint PK_TB_POLINE primary key (POLineID))
呈现表格代码如下:
- C# code
if (LineFlag == "Edit"){ //根据ID查询明细记录 DTLine = GetDT(QryStr); //得到四列,与下面相同}else{ //给空DataTable添加四列,用于接受输入 DTLine.Columns.Add("POLineID", typeof(int)); DTLine.Columns.Add("GoodsID", typeof(int)); DTLine.Columns.Add("Qty", typeof(int)); DTLine.Columns.Add("LineDesc", typeof(string));}this.gridLine.DataSource = DTLine;
保存表格代码如下:
- C# code
//定义POID列DataColumn poidcol = new DataColumn();poidcol.ColumnName = "POID";poidcol.DataType = typeof(int);poidcol.DefaultValue = GetPOID(); //根据单号得到其ID添加POID列,并保存DTLine.Columns.Add(poidcol);CSQL.UPdt(SaveLineStr, DTLine); //包含五列//删除POID列,同步数据DTLine.Columns.Remove(poidcol);DTLine.AcceptChanges();
我跟踪了da.update()生成的SQL语句:
添加一条GoodsID为5,Qty为6的记录
- SQL code
exec sp_executesql N'INSERT INTO [tb_POLine] ([POID], [GoodsID], [Qty], [LineDesc]) VALUES (@p1, @p2, @p3, @p4)',N'@p1 int,@p2 int,@p3 int,@p4 varchar(8000)',@p1=12,@p2=5,@p3=6,@p4=NULL
马上修改数量为8
- SQL code
exec sp_executesql N'UPDATE [tb_POLine] SET [Qty] = @p1 WHERE (([POLineID] = @p2) AND ([POID] = @p3) AND ([GoodsID] = @p4) AND ([Qty] = @p5) AND ((@p6 = 1 AND [LineDesc] IS NULL) OR ([LineDesc] = @p7)))',N'@p1 int,@p2 int,@p3 int,@p4 int,@p5 int,@p6 int,@p7 varchar(8000)',@p1=8,@p2=NULL,@p3=12,@p4=5,@p5=6,@p6=1,@p7=NULL
这里程序报上面提到的错,请注意@p2=NULL这里,在添加记录时POLineID是自动产生的,但是它没有反映到当前的DTLine里来,所以更新出错。
不知我分析的对不对,解决的办法之一就是如何让保存后把数据库产生的POLineID同步到当前DTLine里来,但是我不知道要如何做。
或者还有其它什么更好的办法。
[解决办法]
吱~~~~
保存后再读取数据表重新绑定就行了
[解决办法]
添加后马上保存,然后再编辑。
[解决办法]
检查是否设有主键。
adapter实现数据更新
UpdateCommand的问题:检查更新的字段的原始值是否为空值(原始空值更新时可能会引发此异常)
int型设置为 0
http://topic.csdn.net/u/20090522/10/ab65adb0-059b-48f0-9623-014af8ba10c4.html