c#中如何同时执行2条update语句
发布网友
发布时间:2024-04-22 22:50
我来回答
共3个回答
热心网友
时间:2024-07-10 14:56
一。隐式事物:通过using语句创建TransactionScope事物范围
引用System.Transactons.dll组件,
string strConn = ".;Database=db_RunZhu;uid=sa;pwd =;";//设置数据连接字符串
SqlConnection sqlConn = new SqlConnection(strConn);//创建数据连接
SqlCommand sqlCmd = new SqlCommand();//创建命令执行对象
sqlCmd.Connection = sqlConn;//设置命令对象的连接
sqlConn.Open();//打开数据连接
List<string> strSqls = new List<string>();//创建字符串列表
String strDelete1 = "Delete From tb_AuthorsBook Where AuthorId = '99'";//声明SQL语句字符串
strSqls.Add(strDelete1);//向字符串列表添加字符串
String strDelete2 = "Delete From tb_Author Where AuthorId = '99'";
strSqls.Add(strDelete2);
String strInsert1 = "insert into tb_Author values('99','zhd')";
strSqls.Add(strInsert1);
String strInsert2 = "insert into tb_AuthorsBook values('66','C#范例大全','99')";
strSqls.Add(strInsert2);
try
{
using (TransactionScope txScope = new TransactionScope())//创建事务范围对象
{
foreach (String strSql in strSqls)//向多个表提交数据
{
sqlCmd.CommandText = strSql;
sqlCmd.ExecuteNonQuery();//执行SQL语句
}
}
sqlConn.Close();//关闭连接
MessageBox.Show("提交tb_Author表成功!", "信息提示");
MessageBox.Show("提交tb_AuthorsBook表成功!", "信息提示");
}
catch
{
MessageBox.Show("提交tb_Author表失败!", "信息提示");
MessageBox.Show("提交tb_AuthorsBook表失败!", "信息提示");
}
二。
/// <param name="strSqls">使用List泛型封装多条SQL语句</param>
/// <param name="sqlConn">数据库连接</param>
public bool ExecDataBySqls(List<string> strSqls, SqlConnection sqlConn)
{
bool booIsSucceed = false;//声明提交数据是否成功的标记
SqlCommand sqlCmd = new SqlCommand();//创建SqlCommand对象
sqlCmd.Connection = sqlConn;//设置SqlCommand对象的Connection属性
if (sqlConn.State == ConnectionState.Closed)
{
sqlConn.Open();//打开数据库连接
}
SqlTransaction sqlTran = sqlConn.BeginTransaction();//开始一个事务
try
{
sqlCmd.Transaction = sqlTran;//设置SqlCommand对象的Transaction属性
foreach (string item in strSqls)
{
sqlCmd.CommandType = CommandType.Text;//设置命令类型为SQL文本命令
sqlCmd.CommandText = item;//设置要对数据源执行的SQL语句
sqlCmd.ExecuteNonQuery();//执行SQL语句并返回受影响的行数
}
sqlTran.Commit();//提交事务,持久化数据
booIsSucceed = true;//表示提交数据库成功
}
catch
{
sqlTran.Rollback();//回滚事务,恢复数据
booIsSucceed = false;//表示提交数据库失败!
}
finally
{
sqlConn.Close();//关闭连接
strSqls.Clear();//清除列表strSqls中的元素
}
return booIsSucceed;//方法返回值
}
}
热心网友
时间:2024-07-10 14:57
private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
transaction = connection.BeginTransaction("SampleTransaction");
command.Connection = connection;
command.Transaction = transaction;
try
{
command.CommandText =
"update...................";
command.ExecuteNonQuery();
command.CommandText =
"update......";
command.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
}
}
热心网友
时间:2024-07-10 14:57
string cmdText = @"update 1...;
update 2...";
中间用分号就可以了。
这是批次处理,不是事物。