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);这样写没问题。
是不是表没有定义主键。
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);这样写没问题。
是不是表没有定义主键。
解决方案 »
- 参差数组的物理存储是否连续
- 问wince socket 模拟器和PC怎么设置连接
- 求助关于查询SQL数据举代码
- 请问Nhibernate是否支持Access数据库事务处理?要支持如何配置或方法?
- 请问:C#里面的继承规则 例如 public protect private的语法是怎么写的 class a: public b 报语法错误!
- 超简单问题,编程方式把TextBox的背景色改为KnownColor.Window?
- 如何监视访问网络的应用程序?
- 如何使form窗体固定,不可移动啊?
- 一个非常棘手的问题,关于DataGrid的
- 我的帖子怎末没图标
- C#支持友员函数和INLINE函数吗?
- 求助 实现这样的弹出对话框?
表没设主键会出现这种情况吗?我也是象你这样写的,而且加上事务处理的.
请问您解决了吗?网上很多人都说没遇到,但我很奇怪是否是VS版本的原因所以他们碰不到.
先把DataSet的某一ROW删掉
________________________
怎么删的?delete还是remove?
Update方法操作的大概是这样的:检查DataSet.Tables[TableName]的每一行的DataRowVersion,如果是Deleted,就调用SqlDataAdapter.DeleteCommand来更新数据库。RemoveAt()将某一行从DataTable移走了,Update()就不能为它执行更新数据库的操作。
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);
//
试一试,如果不行的话就是主键没设了
2、表中字段有没有空格,有空格时,采用SqlCommandBuilder会出错,(我碰到过这种情况,然后自己写DELETECOMMAND语句)
对于在运行时动态指定 SelectCommand(例如通过采用用户提供的文本命令的查询工具)的情况,可能无法在设计时指定合适的 InsertCommand、UpdateCommand 或 DeleteCommand。如果 DataTable 映射到单个数据库表或从单个数据库表生成,则可以利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。为了自动生成命令,必须设置 SelectCommand 属性,这是最低的要求。SelectCommand 所检索的表架构确定自动生成的 INSERT、UPDATE 和 DELETE 语句的语法。为了返回构造插入、更新和删除命令所必需的元数据,CommandBuilder 必须执行 SelectCommand。因此,必须额外经历一次到数据源的行程,这可能会降低性能。若要实现最佳性能,请显式指定命令而不是使用 CommandBuilder。SelectCommand 还必须返回至少一个主键或唯一列。如果不存在任何主键或唯一列,则将生成 InvalidOperation 异常,并且不会生成命令。
即自己写DeleteCommand不用,CommandBuilder 自动生成命令需要主键。
首先,我的表中是有主键的,而且执行时是没有异常的,因为我执行Insert、Update等都问题,只是这个Delete执等无效,而且运行时没有任何异常,日志中也没有错误记录,所以我才认为这可能是MS的BUG.
你就delete 一行
然后
int returnVar= sda.Update(ds)
看看是否是0 如果是零那就是delete的语句生成的不对或不正常。
如果是 1 那就是其他地方的问题了。
表中有空字段也会有问题?但问题是其他都没问题就是Delete不行,和空字段没关系吧,现在暂时我也是用显式命令实现,但我就疑问是否是MS的BUG,如是,就反映给MS,让它在下一版本中改正.