带参数的SQL事务

时间:2012-10-15 07:55:10

标签: c# asp.net sql sqltransaction

我正在使用SQL Transaction语句来执行存储过程。传统上,我会使用命令参数将不同的变量插入到命令中。

当我尝试对事务使用相同的方法时,该过程不会插入到数据库中,尽管事务可以正常工作。

以下是我尝试这样做的方法:

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 - 但似乎很长时间都有很多变数。

1 个答案:

答案 0 :(得分:0)

你已经解决了这个问题,但由于没有人回答我会做以后再参考。

您仍需要执行查询,以取消对行cd /usr/local/php7-chanxiao/etc/

的取消注册

另外,请不要忘记在catch块中添加sqlComm.ExecuteNonQuery();,如果Rollback引发异常,则必须将其放入另一个try-catch块中。

示例:

transaction.Rollback();

有关详细信息,请访问:https://msdn.microsoft.com/en-us/library/86773566(v=vs.110).aspx