欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题

程序员文章站 2022-05-08 07:55:17
WPF窗体中建有一个DataGrid,运行后修改各行数据,通过Update方法更新后台数据库。发现在数据库中,其中一列FAcctID(文本型)每次都会变为0,还有一列FDebit(货币型)不能更新,其他列则没有问题。主要代码如下: 排查了好几个小时,对Xaml代码绑定、Parameter参数进行修改 ......

wpf窗体中建有一个datagrid,运行后修改各行数据,通过update方法更新后台数据库。发现在数据库中,其中一列facctid(文本型)每次都会变为0,还有一列fdebit(货币型)不能更新,其他列则没有问题。主要代码如下:

oledbcommand cmdupdateacct = new oledbcommand();
cmdupdateacct.connection = conacct;
cmdupdateacct.commandtext = "update t_voucher set fdate=@fdate, fexp=@fexp, facctid=@facctid,fdebit=@fdebit, fcredit=@fcredit where fid=@fid";

排查了好几个小时,对xaml代码绑定、parameter参数进行修改,均没有找到问题出在哪里。最后,注释掉该行代码,试着重新写sql语句,一个字段一个字段地进行测试,却再没有出现这个问题。两行代码如下:

WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题

从代码编辑器来看,两行代码一模一样。试着比较两行代码,提示不一致。最后粘贴到word中观察,发现@facctid,fdebit=之间的逗号是一个全角逗号,但是在代码编辑器中全角逗号和半角逗号十分相似,没有word中那么明显。

最终原因找到,原来是逗号惹的祸。因为faccid对应的参数本来是【@faccid】,却变成了【@faccid,fdebit】,所以会更新成0;而另一个字段fdebit在sql语句中找不到了(被当成了facctid的参数),自然就不会更新。

在此记载一下,以提醒自己今后注意。