public DataSet UpdateDs(string _strSql,DataSet changedDs, string tableName)
    {
        try
        {
            this.da = new SqlDataAdapter(_strSql, GetConn());
            this.sqlCmdBuilder = new SqlCommandBuilder(da);
            this.da.Update(changedDs, tableName);
            changedDs.AcceptChanges();
            return changedDs;//返回更新了的数据库表
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);//, "数据库更新失败");            
        }
    }
其中 _strSql = "select * from GDC_price_depot";
DataSet 我跟踪过了也没有错.里面有一行,状态是Modify.
da也正确.
在da.Update(changedDs, tableName)时报错.我调试过是da的UpdateCommand是Null,难道一定要为每个更新都写UpdateCommand吗?我见过更新统一调用Update(包括插入,更新,删除),参数都是用的一个select语句,怎么实现的?主键有设置.不知道问得是不是清楚.

解决方案 »

  1.   

    可以的,使用SqlCommandBuilder類即可,使用方法如下:public static DataSet SelectSqlRows(string connectionString,
        string queryString, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand(queryString, connection);
            //因此處創建了一個SqlCommandBuilder,所以會對adapter自動生成其他的Command.
            SqlCommandBuilder builder = new SqlCommandBuilder(adapter);        connection.Open();        DataSet dataSet = new DataSet();
            adapter.Fill(dataSet, tableName);        //code to modify data in DataSet here        //如果沒有SqlCommandBuilder,此行代碼將會異常
            adapter.Update(dataSet, tableName);        return dataSet;
        }
    }但要注意,衹有當對單表進行操作時,這種做法才有效。
      

  2.   

    二楼的不行,不会自動生成其他的Command,错误依旧 
      

  3.   

    手动写UpdateCommand是可以实现的.但为什么不能自动生成呢?这样我对于每一个更新都要单独写语句了.另外,用 sqlCmdBuilder.GetUpdateCommand() 是可以获得UpdateCommand的,但它好象忽略了主键,所以只对单条记录更新有效,单条以上照样报错.大家都来帮我看看啊.
      

  4.   

    更新数据不能用   changedDs.AcceptChanges(); 去掉此行代码试试!
      

  5.   

    怎么没有我的回复呢?
    去掉changedDs.AcceptChanges(); 试
      

  6.   

    你想通过什么方式更新数据库?你上面写的语句:
    adapter.Update(dataSet, tableName);
    你的dataSet中的表根本没有变当然不会更新呀!!
      

  7.   

    To:IFocusYou :changedDs.AcceptChanges();   这个是更新后重设DS数据状态,它是在Update后,不会是这里的问题.To:chuxue1342 
    不好意思,我的变量是有值的,表是有的,也不是这里的问题.前些天出差了...大家帮我来看看.
      

  8.   

    这样不行吧
    你还米新的DataSet呢就Upate了反正每次都重写sql了 干脆连UpdateCommand也每次重来便呗
      

  9.   

    不行就直接写SQL语句
    http://www.dqhxz.com/
      

  10.   

    用局部变量试试:
     public DataSet UpdateDs(string _strSql, DataSet changedDs, string tableName)
        {
            try
            {
                SqlDataAdapter da = new SqlDataAdapter(_strSql, GetConn());
                SqlCommandBuilder sb = new SqlCommandBuilder(da);
                da.Update(changedDs, tableName);
                changedDs.AcceptChanges();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);//,   "数据库更新失败");                         
            }    }
      

  11.   

    如果dataset中的表和参数表名不一致也会报错
      

  12.   

    谢谢大家.祝大家春节快乐...yuxuanji  的方法,改成局部变量后是可以的:)