当前位置: 代码迷 >> ASP.NET >> DataSet更新到数据库的有关问题
  详细解决方案

DataSet更新到数据库的有关问题

热度:3102   发布时间:2013-02-25 00:00:00.0
DataSet更新到数据库的问题
使用以下代码更新数据库
 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呢?

------解决方案--------------------------------------------------------
直接用 SqlCommand.ExecuteNonQuery 更新呗。或者直接修改 UpdateCommand.CommandText
------解决方案--------------------------------------------------------
探讨
直接用 SqlCommand.ExecuteNonQuery 更新呗。或者直接修改 UpdateCommand.CommandText

------解决方案--------------------------------------------------------
一般情况都用实体类来做ORM
------解决方案--------------------------------------------------------
int updateRows = Ad.Update(ds, strTable);
在执行这句之前,ds里的内容跟预想的一样吗
------解决方案--------------------------------------------------------
SqlCommandBuilder builder = new SqlCommandBuilder(Ad); 
sb.ConflictOption = ConflictOption.OverwriteChanges;
sb.SetAllValues = false;

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

可以控制 GetUpdateCommand 方法生成的命令。
------解决方案--------------------------------------------------------
应该是表没有设置主键吧
------解决方案--------------------------------------------------------
表里面有主键吗,用ExecuteNonQuery 执行不就可以了。
------解决方案--------------------------------------------------------
SQL code
DECLARE @nct intselect @nct=........... if(@nct>0)begin    --更新语句endelsebegin--添加添加end
  相关解决方案