你好,這是我寫的第一個光標程序。使用C#在asp.net中SQL Server 2008存儲過程/遊標執行錯誤?
我很驚訝地看到成功的影響表在我的方法,我想用這個程序做行後的錯誤。
我分配菜單後,當我刪除特定的帖子一些菜單,然後我需要更新(添加/刪除)菜單屬於這個職位的所有員工。這下面的過程做所有事情,但我得到一個錯誤:
Error:There is already an object named 'EmployeeMenuMst' in the database.
執行後。
存儲過程是:
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 [email protected]
OPEN EmployeeTable
FETCH NEXT FROM EmployeeTable INTO @EMPID
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM EmployeeMenuMst WHERE [email protected]
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 [email protected] 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
線。它爲什麼會拋出一個錯誤 - 任何想法?
而得到錯誤的行後,在我需要的方式成功地影響了!
幫助感謝!
? – Jacooobley