【发布时间】:2012-10-15 07:55:10
【问题描述】:
我正在使用 SQL 事务语句来执行存储过程。传统上,我会使用命令参数将不同的变量插入到命令中。
当我尝试对事务使用相同的方法时,该过程不会插入到数据库中,尽管事务可以正常工作。
这是我的尝试:
SqlConnection db = DataConn.SqlConnection();
db.Open();
SqlTransaction transaction = db.BeginTransaction();
try
{
const string strSql = "procSiteAddMember @uID, @userName, @password, @nickname, @email, @siteAddress";
var sqlComm = new SqlCommand(strSql, db, transaction) {CommandType = CommandType.Text};
sqlComm.Parameters.Add(new SqlParameter("@uID", SqlDbType.VarChar, 255)).Value = uID;
sqlComm.Parameters.Add(new SqlParameter("@userName", SqlDbType.VarChar, 20)).Value =
txtRegisterUsername.Text.Trim();
sqlComm.Parameters.Add(new SqlParameter("@password", SqlDbType.VarChar, 20)).Value =
txtRegisterPassword.Text;
sqlComm.Parameters.Add(new SqlParameter("@nickname", SqlDbType.VarChar, 20)).Value =
txtRegisterNickname.Text.Trim();
sqlComm.Parameters.Add(new SqlParameter("@email", SqlDbType.VarChar, 20)).Value = txtRegisterEmail.Text.Trim();
sqlComm.Parameters.Add(new SqlParameter("@siteAddress", SqlDbType.VarChar, 20)).Value = lblNickname.Text.Trim();
//sqlComm.ExecuteNonQuery();
//DataConn.Disconnect();
transaction.Commit();
Response.Redirect("~/Member/" + txtRegisterNickname.Text);
}
catch (Exception ent)
{
Response.Write("Error: " + ent.Message);
}
我看到This post - 但它似乎很长,有很多变数。
【问题讨论】:
-
你必须必须调用三个
sqlComm.ExecuteNonQuery();或ExecuteScalar()或ExecuteReader()方法之一。 -
哦哇...好吧,对于其他徘徊的人。该代码确实有效,只需取消注释
sqlComm.ExecuteNonQuery();@AVD:将您的回复作为答案发布:) -
DataConn.SqlConnection()每次都返回一个 new 连接,在这种情况下,您可能正在泄漏连接,因为它不在using中,或者它返回一个 single 连接,这对于 asp.net 应用程序来说性能不佳。 -
您应该必须在 finally 块中使用
commit交易,在catch块中使用rollback()交易方法或使用using块。 -
@AVD,DataConn.Connect 只返回一个打开的 SQLConnection - 将提交放在 finally 块中。
标签: c# asp.net sql sqltransaction