0

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);
    }

私はこの投稿を見ました-しかし、それは多くの変数でかなり長い間巻き込まれているようです。

4

1 に答える 1

1

あなたはすでにこれを解決しましたが、誰も答えなかったので、私は将来の参考のためにそれをします。

クエリを実行する必要があるため、行のコメントを解除しますsqlComm.ExecuteNonQuery();

また、catchブロックを追加することを忘れないtransaction.Rollback();でください。これは、ロールバックが例外をスローした場合に備えて、別のtry-catchブロック内に配置する必要があります。

例:

try
{
    ...
    transaction.Commit();

}
catch (Exception ex)
{
    try
    {
        ...
        transaction.Rollback();
    }
    catch (Exception ex2)
    {
        ...
    }
}

詳細については、https ://msdn.microsoft.com/en-us/library/86773566(v = vs.110).aspxをご覧ください。

于 2016-10-27T09:52:51.083 に答える