使用DataAdpater自动批量更新DataSet中的数据到数据库
2009-10-16 11:57
573 查看
使用DataAdpater的批量更新,好处是不用写具体的sql脚本,尤其是做web服务这个优势非常吸引人。
[WebMethod(Description = "Update服务提供的方法,将包含修改后数据的DateSet与本地数据库同步更新,成功返回更新的行数,失败返回-1。"), SoapHeader("currentUser")]
public int Update(DataSet ds)
{
if (!ValidateUser(currentUser.UserName, currentUser.UserPass))
{
return -1;
}
else
{
int res = 0;
using (SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=xxxx;User ID=sa;Password=sa"))
{
sqlconn.Open();
/ / //使用加强读写锁事务
SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
//所有行设为修改状态
dr.SetModified();
}
//为Adapter定位目标表
SqlCommand cmd = new SqlCommand(string.Format("select * from {0} where 1=0 ", ds.Tables[0].TableName), sqlconn, tran);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da);
da.AcceptChangesDuringUpdate = false;
SqlCommand updatecmd = new SqlCommand(string.Format(" UPDATE [{0}] SET [Name] = @Name WHERE ([ID] = @ID) ", ds.Tables[0].TableName));
//不修改源DataTable
updatecmd.UpdatedRowSource = UpdateRowSource.None;
da.UpdateCommand = updatecmd;
da.UpdateCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");
da.UpdateCommand.Parameters.Add("@ID", SqlDbType.Int, 4, ds.Tables[0].Columns[0].ColumnName);
da.UpdateBatchSize = 10000;
res = da.Update(ds.Tables[0]);
ds.AcceptChanges();
tran.Commit();
sqlconn.Close();
}
catch
{
tran.Rollback();
return -1;
}
}
return res;
}
}
注意:如果不指定DataAdapter的UpdateCommand ,则DataAdapter的CommandBuilder会自动构造默认的Update命令,这个更新是对所有列的更新。比如MSDN上那些例子。
[WebMethod(Description = "Update服务提供的方法,将包含修改后数据的DateSet与本地数据库同步更新,成功返回更新的行数,失败返回-1。"), SoapHeader("currentUser")]
public int Update(DataSet ds)
{
if (!ValidateUser(currentUser.UserName, currentUser.UserPass))
{
return -1;
}
else
{
int res = 0;
using (SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=xxxx;User ID=sa;Password=sa"))
{
sqlconn.Open();
/ / //使用加强读写锁事务
SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
//所有行设为修改状态
dr.SetModified();
}
//为Adapter定位目标表
SqlCommand cmd = new SqlCommand(string.Format("select * from {0} where 1=0 ", ds.Tables[0].TableName), sqlconn, tran);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da);
da.AcceptChangesDuringUpdate = false;
SqlCommand updatecmd = new SqlCommand(string.Format(" UPDATE [{0}] SET [Name] = @Name WHERE ([ID] = @ID) ", ds.Tables[0].TableName));
//不修改源DataTable
updatecmd.UpdatedRowSource = UpdateRowSource.None;
da.UpdateCommand = updatecmd;
da.UpdateCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");
da.UpdateCommand.Parameters.Add("@ID", SqlDbType.Int, 4, ds.Tables[0].Columns[0].ColumnName);
da.UpdateBatchSize = 10000;
res = da.Update(ds.Tables[0]);
ds.AcceptChanges();
tran.Commit();
sqlconn.Close();
}
catch
{
tran.Rollback();
return -1;
}
}
return res;
}
}
注意:如果不指定DataAdapter的UpdateCommand ,则DataAdapter的CommandBuilder会自动构造默认的Update命令,这个更新是对所有列的更新。比如MSDN上那些例子。
相关文章推荐
- 使用DataAdpater自动批量更新DataSet中的数据到数据库
- 自动批量更新DataSet中的数据到数据库
- ASP.NET基础教程-使用CommandBuilder对象自动生成SQL语句对数据进行批量更新
- Code59 使用DataSet更新数据库中的数据表
- Enterprise Library 4.1数据访问应用程序块快速入门【6】使用DataSet更新数据库
- ASP.NET基础教程-使用CommandBuilder对象自动生成SQL语句对数据进行批量更新
- sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的.
- 将DataSet更新自动提交到数据库工具类实现(转)
- 如何使用 t-sql 更新数据库中日期字段的部分数据(年?月?日?时?分?秒?)
- C# 使用 SqlBulkCopy 类批量复制数据到数据库
- 使用 DataAdapter 和 DataSet 更新数据库
- 使用 DataAdapter 和 DataSet 更新数据库 [C#]
- ADO.NET 更新数据库的2种方式::(1)使用DataSet对象更新数据集;(2)使用SqlCommand对象更新单条记录
- 使用SqlBulkCopy将DataTable中的数据批量插入数据库中
- C#使用DataSet Datatable更新数据库的三种实现方法
- 如何使用 Visual C# .NET 从 DataSet 对象更新数据库
- update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新
- 利用DataSet数据集进行数据库更新及数据表复制
- 支持“XX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- 创建数据库后支持的模型被更改,考虑使用代码优先更新数据库