SqlConnection conn=new SqlConnection("data source=(local);uid=sa;pwd=cym;initial catalog=test1");
SqlDataAdapter sda=new SqlDataAdapter("select * from t1",conn);
SqlCommandBuilder scb=new SqlCommandBuilder(sda);
DataSet ds=new DataSet();
sda.Fill(ds);
ds.Tables[0].Rows[0].Delete();
sda.Update(ds);这样写没问题。
是不是表没有定义主键。

解决方案 »

  1.   

    TO: chenyuming2004(一切从2004开始) 
    表没设主键会出现这种情况吗?我也是象你这样写的,而且加上事务处理的.
      

  2.   

    TO:Eddie005(♂) 暴赱 (︶﹏︶) 没有外键关系的,我是先把DataSet的某一ROW删掉,然后Update(dataset)上数据库时发现新增或修改都可以更新到数据库,唯独删除的不行.
      

  3.   

    我也遇到这种情况!和 ermachao(二马超)兄一样。
      

  4.   

    TO: lijing2001(123) 
    请问您解决了吗?网上很多人都说没遇到,但我很奇怪是否是VS版本的原因所以他们碰不到.
      

  5.   

    ______________________
    先把DataSet的某一ROW删掉
    ________________________
    怎么删的?delete还是remove?
    Update方法操作的大概是这样的:检查DataSet.Tables[TableName]的每一行的DataRowVersion,如果是Deleted,就调用SqlDataAdapter.DeleteCommand来更新数据库。RemoveAt()将某一行从DataTable移走了,Update()就不能为它执行更新数据库的操作。
      

  6.   

    SqlConnection conn=new SqlConnection("data source=(local);uid=sa;pwd=cym;initial catalog=test1");
    SqlDataAdapter sda=new SqlDataAdapter("select * from t1",conn);
    sda.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    SqlCommandBuilder scb=new SqlCommandBuilder(sda);
    scb.GetUpdateCommand();DataSet ds=new DataSet();
    sda.Fill(ds);
    ds.Tables[0].Rows[0].Delete();
    sda.Update(ds);
    //
    试一试,如果不行的话就是主键没设了
      

  7.   

    我与是采用Delete()方法的,致于主键设定是否是必要条件,请 penning(飞鱼)兄指教.
      

  8.   

    1、表有没有主键;
    2、表中字段有没有空格,有空格时,采用SqlCommandBuilder会出错,(我碰到过这种情况,然后自己写DELETECOMMAND语句)
      

  9.   

    MSDN
    对于在运行时动态指定 SelectCommand(例如通过采用用户提供的文本命令的查询工具)的情况,可能无法在设计时指定合适的 InsertCommand、UpdateCommand 或 DeleteCommand。如果 DataTable 映射到单个数据库表或从单个数据库表生成,则可以利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。为了自动生成命令,必须设置 SelectCommand 属性,这是最低的要求。SelectCommand 所检索的表架构确定自动生成的 INSERT、UPDATE 和 DELETE 语句的语法。为了返回构造插入、更新和删除命令所必需的元数据,CommandBuilder 必须执行 SelectCommand。因此,必须额外经历一次到数据源的行程,这可能会降低性能。若要实现最佳性能,请显式指定命令而不是使用 CommandBuilder。SelectCommand 还必须返回至少一个主键或唯一列。如果不存在任何主键或唯一列,则将生成 InvalidOperation 异常,并且不会生成命令。
    即自己写DeleteCommand不用,CommandBuilder 自动生成命令需要主键。
      

  10.   

    TOpenning(飞鱼) 兄:
      首先,我的表中是有主键的,而且执行时是没有异常的,因为我执行Insert、Update等都问题,只是这个Delete执等无效,而且运行时没有任何异常,日志中也没有错误记录,所以我才认为这可能是MS的BUG.
      

  11.   

    你看看自动生成的Delete 语句对不
    你就delete 一行
    然后
    int returnVar= sda.Update(ds)
    看看是否是0 如果是零那就是delete的语句生成的不对或不正常。
    如果是 1 那就是其他地方的问题了。
      

  12.   

    TO: dazhu2(边城浪子(倚天不出,谁与争锋)) 
    表中有空字段也会有问题?但问题是其他都没问题就是Delete不行,和空字段没关系吧,现在暂时我也是用显式命令实现,但我就疑问是否是MS的BUG,如是,就反映给MS,让它在下一版本中改正.
      

  13.   

    检查一下删除的Sql语句中的参数对应是否正确。