利用Enterprise Library和DataSet(或者DataTable)结合进行批量更新
冯唐李广 2008-04-26 07:17:14 你好,我现在做的一个程序就是:利用Enterprise Library2.0作为数据库底层访问框架。
现在需要批量更新一张表,查了很多资料,写法大抵如下是:
Database db = DatabaseFactory.CreateDatabase();
DataSet personDataSet = new DataSet();
string sqlCommand = "Select * from person";
DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);
string personTable = "person";
// 得到初始化数据
db.LoadDataSet(dbCommand, personDataSet, personTable);
// 得到未修改前的数据集
DataTable table = personDataSet.Tables[personTable];
// 往DataSet中添加一行数据
DataRow addedRow = table.Rows.Add(new object[] { 18, "New person", "男", "654321" });
// 修改
table.Rows[0]["ProductName"] = "Modified product";
// 下面分别创建添加,修改,删除的操作
DbCommand insertCommand = db.GetStoredProcCommand("AddPerson");
db.AddInParameter(insertCommand, "Name", DbType.String, "Name", DataRowVersion.Current);
db.AddInParameter(insertCommand, "Sex", DbType.String, "Sex", DataRowVersion.Current);
db.AddInParameter(insertCommand, "ID", DbType.Int32, "ID", DataRowVersion.Current);
DbCommand deleteCommand = db.GetStoredProcCommand("DeletePerson");
db.AddInParameter(deleteCommand, "ID", DbType.Int32, "ID", DataRowVersion.Current);
DbCommand updateCommand = db.GetStoredProcCommand("UpdatePerson");
db.AddInParameter(updateCommand, "Name", DbType.String, "Name", DataRowVersion.Current);
db.AddInParameter(updateCommand, "Sex", DbType.String, "Sex", DataRowVersion.Current);
db.AddInParameter(insertCommand, "ID", DbType.Int32, "ID", DataRowVersion.Current);
// 提交对DataSet的修改,并返回影响的行数
int rowsAffected = db.UpdateDataSet(productsDataSet, "Products", insertCommand, updateCommand, deleteCommand, Microsoft.Practices.EnterpriseLibrary.Data.UpdateBehavior.Standard); //***********************
现在我主要的问题是:
1.我只是需要批量更新(单独的insert或update操作),而db.UpdateDataSet()这个方法必须同时有:insertCommand, updateCommand, deleteCommand这3个参数。
2.我需要更新的表有60多个字段,我能不给传入参数进去吗? 如果我不用企业库,直接用ADO.net,adapter.Update(ds, "test"); dataset.AcceptChanges();几行代码的事,到了企业库里怎么如此麻烦啊?
3.我不知道企业库自身有没有事务控制(要么全部更新成功,要么失败全部回滚),如果没有,在我批量更新时怎么来控制?
希望尽快帮我解决一下,谢谢!