分享

C#中用SqlDataAdapter修改数据库中的表(源码+注意的细节)

 mylore 2012-05-23


标题
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 命令,获得两张表,并填充到数据集对象中

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多