首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlCommandBuilder生成不正确的update语句

SqlCommandBuilder生成不正确的update语句
EN

Stack Overflow用户
提问于 2020-02-11 23:13:41
回答 1查看 205关注 0票数 1

我正在尝试使用SqlDataAdapter来更新数据库中的表。

我从表中检索模式,它用列和主键正确地填充了DataTableDataTable中只有一个约束,就是正确的三个PK列。

代码语言:javascript
复制
DataSet ds = new DataSet();
DataTable dt = ds.Tables.Add(tableName);
adapter.SelectCommand = new SqlCommand("select * from " + tableName, connection);
adapter.FillSchema(dt, SchemaType.Source);

// Add datarows

我为适配器创建了一个SqlCommandBuilder,...

代码语言:javascript
复制
SqlCommandBuilder cmdBld = new SqlCommandBuilder(adapter);

..。但是它生成的update命令在WHERE子句中包含许多不是主键的字段组合。据我所知,构建器应该根据DataTable的PK约束生成update语句

代码语言:javascript
复制
UPDATE [MyTable] 
SET [CCode] = @p1, 
    [RefNumber] = @p2, 
    [BrandId] = @p3, 
    [BasePrice1] = @p4, 
    [BasePrice2] = @p5,
    ....
WHERE 
    (([CCode] = @p14) -- PK
    AND ([RefNumber] = @p15) -- PK
    AND ([BrandId] = @p16) -- PK
    AND ([BasePrice1] = @p17)
    AND ([BasePrice2] = @p18)
    AND ((@p19 = 1 AND [AddedBy] IS NULL) OR ([AddedBy] = @p20))
    AND ((@p21 = 1 AND [SFlag] IS NULL) OR ([SFlag] = @p22))
    AND ((@p23 = 1 AND [CartonCode] IS NULL) OR ([CartonCode] = @p24))
    AND ((@p25 = 1 AND [AvailableOrder] IS NULL) OR ([AvailableOrder] = @p26))
    AND ((@p27 = 1 AND [AvailableRegistration] IS NULL) OR ([AvailableRegistration] = @p28))
    AND ((@p29 = 1 AND [IsFOC] IS NULL) OR ([IsFOC] = @p30))
    AND ((@p31 = 1 AND [ItemBrand] IS NULL) OR ([ItemBrand] = @p32))
    AND ((@p33 = 1 AND [QuantityMultiply] IS NULL) OR ([QuantityMultiply] = @p34)))

有人能告诉我为什么我没有得到预期的基于PK的更新命令吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-02-17 12:09:12

这个答案有点晚,但请看一下SqlCommandBuilder.ConflictOption属性。默认值是: CompareAllSearchableValues,这是您看到的行为。如果您只想检查主键,请尝试使用OverwriteChanges。

例如:

代码语言:javascript
复制
SqlCommandBuilder cmdBld = new SqlCommandBuilder(adapter);
cmdBld.ConflictOption = ConflictOption.OverwriteChanges; 

对ConflictOption枚举的引用:https://docs.microsoft.com/en-us/dotnet/api/system.data.conflictoption?view=netframework-4.8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60172028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档