こんにちは、これは私が書いた最初のカーソルプログラムです。
このプロシージャを使用して実行したいプロシージャのテーブルの行に正常に影響を与えた後、エラーが発生したことに驚いています。
メニューを投稿に割り当てています。特定の投稿からメニューを削除する場合、この投稿に属するすべての従業員のメニューを更新(追加/削除)する必要があります。この以下の手順はすべてのことを行いますが、エラーが発生します:
エラー:データベースには「EmployeeMenuMst」という名前のオブジェクトがすでに存在します。
実行後。
ストアドプロシージャは次のとおりです。
ALTER PROCEDURE [sUpdateEmpMenuMst]
(@EmployeePostID INT)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @EMPID INT
DECLARE @EMPMENUID INT
BEGIN TRAN
BEGIN TRY
DECLARE EmployeeTable CURSOR FOR
SELECT EmployeeID FROM EMPLOYEEMST WHERE EmployeePostID=@EmployeePostID
OPEN EmployeeTable
FETCH NEXT FROM EmployeeTable INTO @EMPID
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM EmployeeMenuMst WHERE EmployeeID=@EMPID
FETCH NEXT FROM EmployeeTable INTO @EMPID
END
CLOSE EmployeeTable
DEALLOCATE EmployeeTable
SELECT EmployeeMst.EmployeeID, EmployeePostMenuMst.MenuID, EmployeePostMenuMst.AccessLevelID,1 AS ISVISIBLE
INTO EmployeeMenuMst
FROM EmployeePostMenuMst
INNER JOIN EmployeeMst
ON EmployeePostMenuMst.EmployeePostID = EmployeeMst.EmployeePostID
WHERE EmployeeMst.EMPLOYEEPOSTID=@EmployeePostID ORDER BY EmployeeMst.EMPLOYEEID
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
IF @@TRANCOUNT > 0
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity INT
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
END
GO
コードビハインドaspx.cs
ファイル:
private void UpdateMenus()
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = new SqlConnection(conStr);
try
{
con.Open();
cmd.CommandText = "sUpdateEmpMenuMst";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@EmployeePostID", Convert.ToInt32(Session["postID"]));
cmd.Connection = con;
int i = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
con.Close();
}
finally
{
con.Close();
}
}
エラーはExecuteNonQuery
オンラインです。なぜそれはエラーをスローするのですか?
そして、エラーを取得した後、行は必要な方法で正常に影響を受けます!
感謝します!