2

行を削除するストアドプロシージャがあります。サンプルコード:

CREATE PROCEDURE [dbo].[ap_um_delete_tems_grid]
(
    @agency char(3) 
    , @subagency char(1)
    , @grid_id int
    , @role_id int
)
AS
DELETE FROM [grid_setup]
  WHERE agency = @agency 
    AND subagency = @subagency 
    AND gs.grid_id = @grid_id 
    AND role_id = @role_id

このSProcをSqlMgmtStudioから直接実行すると、正常に動作します。ただし、トランザクションを使用してC#コードでこれを実行しようとすると、非常に興味深いSqlExceptionが発生します。

'ap_um_delete_tems_grid'の近くの構文が正しくありません

例外の詳細には、行番号1で発生すると記載されています。C#コードは次のとおりです。

using (SqlConnection connection = new SqlConnection(conn.TemsConnectionString))
{
    connection.Open();
    SqlCommand command = connection.CreateCommand();
    SqlTransaction transaction;

    // Start the local transaction
    transaction = connection.BeginTransaction("GridReplaceTransaction");
    command.Connection = connection;
    command.Transaction = transaction;

    try
    {
        command.CommandText = "ap_um_delete_tems_grid";

        SqlParameter parm = new SqlParameter();

        // Adding the parameters

        int cnt = command.ExecuteNonQuery();
        transaction.Commit();
    }
    catch (Exception ex)
    {
        transaction.Rollback();
    }
}

上記のコードは、トランザクションに入れる前に機能しました。構文エラーが発生するのはなぜですか?おそらく、トランザクションをサポートするためにSProcに何かが必要なためですか?それとも私は何か他のものを台無しにしていますか?

注:1回の削除でトランザクションは必要ないと言わないでください。上記はマルチステッププロセスの一部です。つまり、削除後に新しい行を追加します。ありがとう。

4

1 に答える 1

5

あなたが行方不明です:

    command.CommandType = CommandType.StoredProcedure;

それ以外の場合は、デフォルトのを使用し 、ストアドプロシージャの名前ではなくステートメントとしてCommandType.Text扱います。"ap_um_delete_tems_grid"

于 2013-02-16T01:00:43.107 に答える