我有刪除行的存儲過程。示例代碼:必須一個T-SQL存儲過程包含腳本支持的SqlClient交易?
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
如果我直接從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();
}
}
上面的代碼在我將其放入事務之前工作。爲什麼我會收到語法錯誤?也許是因爲在SProc中需要有一些東西來支持交易?還是我在亂七八糟的東西呢?
注:請不要試圖告訴我,我並不需要一個事務單個刪除。以上是多步驟過程的一部分,即刪除後添加新行。謝謝。
對不起,希望它站出來之前,有人告訴我一些無關緊要的問題。不要大喊,只是想阻止某人發表無用的評論。我以前見過這種東西,只是想把它短路。 – Cyberherbalist 2013-02-16 01:05:11
用斜體字替換大寫淡化的說明。不想看起來過於霸道或嚇壞了。 – Cyberherbalist 2013-02-16 01:11:43
您有其他幾個_newb_錯誤:你'SqlCommand'和'SqlTransaction'需要在'using'塊。而且,忽略異常是一個非常糟糕的主意。你應該用'throw;'重新拋出它,或者用'ex'拋出一個新的異常作爲'InnerException':'throw new Exception(「My message」,ex);'。最糟糕的是,你應該記錄或顯示完整的'ex.ToString()'。 – 2013-02-16 01:15:15