SqlDataAdaper有InsertCommand、UpdateCommand、DeleteCommand,我把含有insert的SQL语句的SQLCommand赋给SqlDataAdaper的InsertCommand,执行SqlDataAdaper的Update方法,执行没有问题,为什么我把含有delete的SQL语句的SQLCommand赋给SqlDataAdaper的DeleteCommand,执行SqlDataAdaper的Update方法,报错“其他信息: 当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。”。
    谢谢了!!

解决方案 »

  1.   

    直接把语句付给sqldataadapter就行,不用付给deleteCommand。
      

  2.   

    SQLHelper.cs可以解决你所有问题
      

  3.   

    还是把你的代码贴出来吧
    是不是没有SqlCommandBuilder
      

  4.   

    必须使用SqlCommandBuilder生成有效的command
      

  5.   


                  打开连接语句......
                  SqlDataAdapter dap = new SqlDataAdapter("select * from 要更新的表", conn);
                  SqlCommandBuilder cmdBld = new SqlCommandBuilder(dap);
                  dap.Update(ds, tableName);
      

  6.   

    SqlCommand cmd = new SqlCommand();
    SqlConnection conn = new SqlConnection(connectionString);
              
    try
    {
    cmd.Connection = conn;
    cmd.CommandText = "DELETE FROM TABLE703";
    cmd.CommandType = CommandType.Text; SqlDataAdapter adp = new SqlDataAdapter(cmd);         adp.DeleteCommand =cmd;                                adp.Update(ds,"Table");(在这报错!为什么??)
                             }
    catch
    {
    throw;
    }
      

  7.   

    加上SqlCommandBuilder这个也不行啊,就是把SqlAdapter的DeleteCommand赋上值以后,在调用Update就会报错!
      

  8.   

    你把加上SqlCommandBuilder的代码贴出来
      

  9.   

    看看ds中的各行的RowState是不是有DataRowState.Added的数据?
      

  10.   

    RowState 是 DataRow 很重要的一个属性, 表示 DataRow 当前的状态. RowState 有 Added, Modified, Unchanged, Deleted, Detached 几种, 分别表示 DataRow 被添加, 修改, 无变化, 删除, 从表中脱离. 在调用一些方法或者进行某些操作之后, 这些状态可以相互转化.DataAdapter 可以根据 RowState 来决定如何影响数据库等存储位置. 如果 DataRow 的状态为 Added,DataAdapter 将把 DataRow 添加到数据库等存储位置, 对于 Modified, Deleted 则将执行更新和删除操作. 其实, 最终的操作效果还是决定于 DataAdapter 的 SelectCommand, UpdateCommand 等 DbCommand. 如果, 在 UpdateCommand 中写入 Delete 语句或者执行有删除操作的存储过程, 那么状态为 Modified 的 DataRow 最终将在数据库中删除而不是更新. (注: 下文中所说的 DataAdapter 操作均如此.)