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

解决方案 »

  1.   

    你在更新前 把datatable中的行状态设置成修改试试
      

  2.   

    DataAdapter更新需要表具有主键。
      

  3.   

    使用的DataTable和DataAdapter都是VS自动生成的,关系和约束也是有的。
      

  4.   

    我单步调试没有问题,也没有异常,不过Update的返回值是0,所以我才说无效..
      

  5.   

    是否有SqlCommandBuilder :
    dim cmb as SqlCommandBuilder = new SqlCommandBuilder(DataAdapter) 
      

  6.   

    你在更新前 把datatable中的行状态设置成修改试试
      

  7.   


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

  8.   

    自动生成的dataAdapter,已经带有更新逻辑了。但是你没有用dataAdapter去fill DataSet,而是自己往其中一个表中插入一些行,这样的话,dataAdapter当然无法为你更新了,因为你的table不符合dataAdapter更新逻辑的语句要求。这种情况下,你可以自己定义一个dataAdapter,然后为他添加一个updatecommand,这个更新命令,符合你自定义数据集中表的结构要求,然后就可以update了。
      

  9.   

    我试过Fill了,也是不行的。不过已经找到问题所在了,所要操作的数据库文件(Data.mdf)是作为项添加入项目的,连接字符串是自动生成的,其中用了DataDirectory替代字符,这个是在项目文件夹中,但是调试运行的时候可执行程序是在"项目文件夹\Debug\bin\"下面的。
    这个文件夹下面是没有数据库文件的,但是程序自动建立了一个数据库文件的副本(下称副本),因此实际上所有的更新都放在这个副本里面了,这个副本又是每次程序运行都会重新生成Data.mdf的一个副本,所以...
    大家注意一下就好了...