读书人

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

发布时间: 2012-05-23 13:44:13 作者: rapoo

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 

读书人网 >asp.net

热点推荐