对DataSet修改后,使用sqlcommandbuilder自动生成更新语句,然后update到数据库,新增记录、修改记录都没有问题,但是为什么删除记录就没有影响?我跟踪过,生成了删除语句,但是没有执行删除操作,代码如下:
//连接到数据库
SqlConnection con = new SqlConnection(strCon);
con.Open();
//命令对象
SqlCommand com = new SqlCommand();
com.Connection = con;
//事务
SqlTransaction trans;
trans = con.BeginTransaction("mymain");
com.Transaction = trans;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = com;
DataSet dsData = new DataSet();
strSql = "Select * from test";
da.SelectCommand.CommandText = strSql;
SqlCommandBuilder cb = new SqlCommandBuilder(da);
strErr = dbData.QueryToDataSet(ref da,ref dsData,"Data");
if(strErr != "")
{
trans.Rollback("mymain");
return;
}
int iRow = dsData.Tables["Data"].Rows.Count;
//此处修改原有记录能成功
//dsData.Tables["Data"].DefaultView[0].Row["t3"] = "31";
//清除记录,不成功,为何??
dsData.Tables["Data"].Clear();
//此处新增记录能成功
// DataRow dr = dsData.Tables["Data"].NewRow();
// dr["t1"] = "61";
// dr["t2"] = "62";
// dr["t3"] = "63";
// dsData.Tables["Data"].Rows.Add(dr);
cb.RefreshSchema();
da.InsertCommand = cb.GetInsertCommand();
da.UpdateCommand = cb.GetUpdateCommand();
da.DeleteCommand = cb.GetDeleteCommand();
try
{
da.Update(dsData,"Data");
trans.Commit();
}
catch(Exception err)
{
trans.Rollback("mymain");
return;
}
dsData.Tables["Data"].Clear();
--》
foreach( DataRow row in dsData.Tables["Data"].Rows )
row.Delete();
clear只是从集合中清空,datarow还是存在的。
同意楼上