首页 新闻 会员 周边

关于dataset批量更新数据库的问题

0
悬赏园豆:20 [已解决问题] 解决于 2011-01-17 09:17

各位大侠请指点,现在 我有一个单,单数据可以增删改。改了以后我怎样让他们批量的更改到数据库,该改的就该,该删的就删,该新增的就新增。小弟菜鸟一个,在网上搜索的资料都不符合要求。望大侠指点。

後浪的主页 後浪 | 小虾三级 | 园豆:830
提问于:2011-01-11 10:31
< >
分享
最佳答案
0
/// <summary>
/// 更新DataSet
/// </summary>
/// <param name="cnnStr">连接串</param>
/// <param name="ds">要更新的DataSet</param>
/// <param name="sqlBefore">在更新之前执行的SQL</param>
/// <param name="sqlAfter">在更新之后执行的SQL</param>
public static void Update(string connectionString, DataSet ds, string sqlBefore, string sqlAfter)
{
SqlDataAdapter da
= null;
SqlTransaction tran
= null;
using(SqlConnection cnn = new SqlConnection(connectionString))
{
cnn.Open();
tran
= cnn.BeginTransaction();

if(!string.IsNullOrEmpty(sqlBefore.Trim())) //执行更新前的SQL
{
using(SqlCommand cmd = new SqlCommand(sqlBefore.Trim(), cnn, tran))
{
cmd.ExecuteNonQuery();
}
}
foreach(DataTable dt in ds.Tables)
{
string sql = string.Format("SELECT * FROM {0} WHERE 1 = 0 ", dt.TableName);
if(dt.ExtendedProperties["SELECT"] != null)
{
sql
= dt.ExtendedProperties["SELECT"].ToString();
}
da
= new SqlDataAdapter();
SqlCommandBuilder cb
= new SqlCommandBuilder(da);
da.SelectCommand
= new SqlCommand(sql, cnn, tran);
da.Update(ds, dt.TableName);
}
if(!string.IsNullOrEmpty(sqlAfter.Trim())) //执行更新后的SQL
{
using(SqlCommand cmd = new SqlCommand(sqlAfter.Trim(), cnn, tran))
{
cmd.ExecuteNonQuery();
}
}
tran.Commit();
}
}

/// <summary>
/// 更新DataSet
/// </summary>
/// <param name="cnnStr"></param>
/// <param name="tableName"></param>
/// <param name="ds"></param>
public static void Update(string connectionString, DataSet ds)
{
Update(connectionString, ds,
string.Empty, string.Empty);
}
收获园豆:20
彭汉生 | 小虾三级 |园豆:1233 | 2011-01-11 11:02

为什么我执行的结果是全部是新增而不是修改?

邪华神 | 园豆:200 (初学一级) | 2012-06-08 15:49
其他回答(1)
0

不明白你想要的效果。

Astar | 园豆:40805 (高人七级) | 2011-01-13 16:00
就是我每次进入一个记录单,就将该记录单下的所有明细都读到了dataset,这个明细时支持修改的,我修改以后就要保存啊。保存就要提交对吧。但是又 不是提交所有的,只是改变了记录才提交到数据库。没改变的就不做任何操作!
支持(0) 反对(0) 後浪 | 园豆:830 (小虾三级) | 2011-01-14 15:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册