T-Sql存储过程必须包含支持SqlClient事务的脚本吗?

Cyb*_*ist 2 c# t-sql ado.net

我有一个删除行的存储过程.示例代码:

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
Run Code Online (Sandbox Code Playgroud)

如果我直接从Sql Mgmt Studio执行这个SProc,它可以正常工作.但是,如果我尝试使用事务在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在我把它放入一个事务之前就已经工作了.为什么我会收到语法错误?也许是因为SProc中需要有东西来支持交易?还是我搞乱别的东西?

注意:请不要试图告诉我单个删除不需要交易.以上是多步骤过程的一部分,即在删除后添加新行.谢谢.

Mit*_*eat 5

你错过了:

    command.CommandType = CommandType.StoredProcedure;
Run Code Online (Sandbox Code Playgroud)

否则,它使用默认值 CommandType.Text并将其视为"ap_um_delete_tems_grid"语句而不是存储过程的名称.