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语句,一个字段一个字段地进行测试,却再没有出现这个问题。两行代码如下:


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

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

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