PetShop中将SqlTransaction作为参数的方法如何理解或使用
最近在研究PetShop 4的DBHelper类,关于SQLServer部分的SQLHelper类中,其他的代码都好理解,但就是下面这个方法是将SqlTransaction作为参数来执行T-SQL命令,并返回受影响的行数。但是我看到在方法中,又没有涉及到事务的开始、提交以及发生错误时的回滚操作。除了事务外还有传进来了一个T-SQL语句cmdText。本人目前还处于学习C#的初级阶段,以前做事务的提交,都是直接
trans=conn.BeginTransaction();
trans.Commit();
trans.Rollback();
至于下面的方法,我还不清楚是怎么执行的。哪位高手能够写一段示例代码,执行下面的ExecuteNonQuery事务方法,向数据库中插入三条记录,并附带事务处理。
/// <summary>
/// Execute a SqlCommand (that returns no resultset) using an existing SQL Transaction
/// using the provided parameters.
/// </summary>
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
因为这个方法还调用了一个PrepareCommand的方法,我现在把这个方法也贴出来。
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null) {
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
谢谢各位大哥大嫂帮忙了。 --------------------编程问答-------------------- 代码居然不能着色显示...:
/// <summary>
/// Execute a SqlCommand (that returns no resultset) using an existing SQL Transaction
/// using the provided parameters.
/// </summary>
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
附加方法:
--------------------编程问答-------------------- 自己Google搜索,找到答案了。。。 --------------------编程问答-------------------- 就是在一个事务里执行多个命令
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null) {
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
补充:.NET技术 , ASP.NET