我有一个删除行的存储过程.示例代码:
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中需要有东西来支持交易?还是我搞乱别的东西?
注意:请不要试图告诉我单个删除不需要交易.以上是多步骤过程的一部分,即在删除后添加新行.谢谢.
你错过了:
command.CommandType = CommandType.StoredProcedure;
Run Code Online (Sandbox Code Playgroud)
否则,它使用默认值 CommandType.Text
并将其视为"ap_um_delete_tems_grid"
语句而不是存储过程的名称.