今天在增加P4厂 FPC报价模块配置,增加刚挠信息节点,在保存时报错:UpdateCommand影响了预期 1 条记录中的 0
保存时使用:SqlDataAdapter批量更新DataTable,怎么回事呢,以前使用SqlDataAdapter保存一切都好好的,
今天这咋咱不行了呢。
接着准备调试发现原因:
检查DataRow行RowState为 DataRowState.Modified OK呀,
接着检测DataTable数据,很正常,没发现问题
然后查看传入的参数,一切也没毛病
这就奇怪了。
想想以前研究过:SqlDataAdapter批量更新机制,是能过传入Select SQL与DataTable自动生成SQL达到批量更新,
于是我用用SQL Server Profile工具,原因直接定位为Update SQL,查看Update SQL语句,
发现Where条件中的Params字段是String型Flase或True
原来问题出在这里,两边数据类型不一致
UI界面中Params为bool类型
数据库中Params为String类型
找到问题点解决问题点,就很容易决此问题了,
要想实现使用SqlDataAdapter批量保存,且为了达到底层数据用string,UI界面使用bool,实现兼容,
解决办法:
1.在读取数据源前,先将数据源中Params字段值1改为True,0改为Flase字符
2.将模版更新到实际数据源中,保证数据源为全集(必须操作此步,不然用SqlDataAdapter保存也出错,不然得换种方式保存)
3.由于UI界面是bool,数据源为String类型,读取时将String转为bool
4.接着正常使用SqlDataAdapter即可
UI示例:
DB示例: