【标题】 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
|
请发表评论