【标题】
C#中用SqlDataAdapter修改数据库中的表
【内容】
/*
修改数据集中的表,然后保存到数据库中。
传入的参数:
String sql=""
sql+="select * from tb1";
sql+=Environment.NewLine;
sql+="select * from tb2";
注意:查询语句必须要查询出表的所有字段。
*/
public void UpdateDataFromDSToDB(string sql)
{
SqlConnection conn = new SqlConnection(ADDbBase.SqlStr);
SqlDataAdapter sda = new SqlDataAdapter();
//下面的两句很关键,利用SqlCommandBuilder对象与一个合法的SelectCommand对象,
//来填充SqlDataAdapter 对象的全部4个命令属性
sda.SelectCommand = new SqlCommand(sql,conn);
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
conn.Open();
DataSet ds = new DataSet();
sda.Fill(ds); //数据集中包含两张表
//modify data in dataset
DataTable dtOne = ds.Tables[0];
DataTable dtTwo = ds.Tables[1];
for(int i=0; i<dtOne.Rows.Count; i++)
{
bool modify = false;
int num = 0;
for(int j=0; j<dtTwo.Rows.Count; j++)
{
if(dtOne.Rows[i]["cateInherit"].ToString() == dtTwo.Rows[j]["cateUpID"].ToString())
{
dtTwo.Rows[j]["cateUpID"] = dtOne.Rows[i]["cateid"];
modify = true;
num++;
}
else
{
modify = false;
}
if(modify == false && num != 0)
{
break;
}
}
}
try
{
//修改数据源,Update方法首先获取DataTable对象的变化情况,然后逐行地修改
//在ADO.NET 2.0中,可以在Update之前设置UpdateBatchSize的值,以一批修改多条记录的方式
//发送给数据库,来提高性能
sda.Update(dtTwo);
}
catch(Exception ex)
{
Util.AlertMesg(ex.Message); //Util是自己定义的方法
}
finally
{
conn.Close();
}
}
【注意的细节】
1、UpdateDataFromDSToDB是封装的方法,参数为SQL语句。这里表示从两张表中查询数据。
其中SQL语句必须要查询出表的所有字段。
2、ADDbBase.SqlStr:数据库连接字符串,ADDbBase是我自己定义类
3 、
sda.SelectCommand = new SqlCommand(sql,conn);
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
这两句很关键,请参考上面的说明。
4、sda.Update(dtTwo),这里不能使用sda.Update(ds ),否则,即时不报错,但数据源并没有更新。
其中dtTwo为已经修改了的表;ds表示数据集,其中有dtOne 和dtTwo两张表,但是dtOne没有被修
改。
5、UpdateDataFromDSToDB方法的参数值如下:
sql+="select * from tb1";
sql+=Environment.NewLine;
sql+="select * from tb2";
通过该Sql 命令,获得两张表,并填充到数据集对象中
【Tags】C#,MS SQL, DataSet,SqlDataAdapter