DataSet更新到数据库的问题

chenhaoying 2012-04-24 11:04:38
使用以下代码更新数据库
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandText = strSql;
sqlCmd.Connection = connection;

if (ConnectionState.Closed == connection.State)
{
connection.Open();
}

SqlDataAdapter Ad = new SqlDataAdapter(sqlCmd.CommandText, connection);

Ad.ContinueUpdateOnError = true; //继续存储没有错的行

SqlCommandBuilder builder = new SqlCommandBuilder(Ad); //自动生成update,insert,delete语句


builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";

Ad.Fill(ds, strTable);


Ad.UpdateCommand = builder.GetUpdateCommand();

int updateRows = Ad.Update(ds, strTable);
bRun = (updateRows > 0) ? true : false;

Ad.Dispose();
ds.Dispose();

赋strSql="select * from tb where id=0";
但发现只新增数据,没有更新到数据,设置断点获取UpdateCommand 的更新语句发现是update tb set id=@sp1,c2=@sp2,c3=@sp3 where id=@sp1 and c2=@sp2 and c3=@sp3;也就是说自动生成的更新条件是所有字段的,这也就造成了更新不到数据了,怎么设置它的更新条件只能取第一个字段或者关键字id呢?
...全文
171 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
风2013 2012-05-10
  • 打赏
  • 举报
回复

DECLARE @nct int

select @nct=...........

if(@nct>0)
begin
--更新语句
end
else
begin
--添加添加
end


大致一条这样子的sql语句 应该就可以搞定你得问题了吧
zhangdaowu5 2012-05-10
  • 打赏
  • 举报
回复
表里面有主键吗,用ExecuteNonQuery 执行不就可以了。
shine888666 2012-05-10
  • 打赏
  • 举报
回复
应该是表没有设置主键吧
winner2050 2012-04-26
  • 打赏
  • 举报
回复
SqlCommandBuilder builder = new SqlCommandBuilder(Ad);
sb.ConflictOption = ConflictOption.OverwriteChanges;
sb.SetAllValues = false;

试试看,我记得是通用的。

可以控制 GetUpdateCommand 方法生成的命令。
chenhaoying 2012-04-25
  • 打赏
  • 举报
回复
我加上手动创建并初始化 UpdateCommand 属性,解决了更新的问题。可惜代码不能通用,每个表都要重新写个类似的方法。
chenhaoying 2012-04-25
  • 打赏
  • 举报
回复
主要是提交的数据有更新的和新增的一起提交的,通过RowState的Added状态来判断是新增还是更新。另外又想做成通用的方法,所以传个sql过去让它自动通过这个sql来生成InsertCommand和UpdateCommand,现在新增的没问题了,就UpdateCommand这个条件不适合。
anzhiqiang_touzi 2012-04-25
  • 打赏
  • 举报
回复
一般情况都用实体类来做ORM
anzhiqiang_touzi 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
直接用 SqlCommand.ExecuteNonQuery 更新呗。或者直接修改 UpdateCommand.CommandText
[/Quote]
jun471537173 2012-04-25
  • 打赏
  • 举报
回复
int updateRows = Ad.Update(ds, strTable);
在执行这句之前,ds里的内容跟预想的一样吗
chenhaoying 2012-04-25
  • 打赏
  • 举报
回复
顶啊。
你们不会没碰过这个问题吧?
望高手不吝指教。
机器人 2012-04-24
  • 打赏
  • 举报
回复
直接用 SqlCommand.ExecuteNonQuery 更新呗。或者直接修改 UpdateCommand.CommandText

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧