日期:2014-05-18  浏览次数:20776 次

关于自动生成的Adapter的Update无效问题
我用的vs2008+SQL SERVER 2005 express
我的操作如下:
1、添加一个“基于服务的数据库”项目,跟随引导建立了一个数据集,数据库中的每个表都有自己的一个DataTable和DataAdapter,这都是VS自动生成的。
2、我在代码中定义一个数据集变量,然后向其中一个表中插入一些行,这些行我都在单步调试中查看了,每一行的RowState都是Added,我调用对应的dataAdapter的Update将这个表中的所有行更新到数据库。
但是Update不起作用,它的返回值始终是0,没有任何异常,查看数据库也是没有插入这些行。
求解答!

------解决方案--------------------
防沉.... 调试跟踪 、执行的语句对的吧?
------解决方案--------------------
你在更新前 把datatable中的行状态设置成修改试试
------解决方案--------------------
DataAdapter更新需要表具有主键。
------解决方案--------------------
是否有SqlCommandBuilder :
dim cmb as SqlCommandBuilder = new SqlCommandBuilder(DataAdapter) 

------解决方案--------------------
你在更新前 把datatable中的行状态设置成修改试试
------解决方案--------------------
给字段名加上 [] 括起来再试试
------解决方案--------------------
C# code

OleDbCommandBuilder cmdb = new OleDbCommandBuilder(DA_Config);
                cmdb.QuotePrefix = "[";
                cmdb.QuoteSuffix = "]";

------解决方案--------------------
自动生成的dataAdapter,已经带有更新逻辑了。但是你没有用dataAdapter去fill DataSet,而是自己往其中一个表中插入一些行,这样的话,dataAdapter当然无法为你更新了,因为你的table不符合dataAdapter更新逻辑的语句要求。

这种情况下,你可以自己定义一个dataAdapter,然后为他添加一个updatecommand,这个更新命令,符合你自定义数据集中表的结构要求,然后就可以update了。