2012-12-19 61 views
0

你好,這是我寫的第一個光標程序。使用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線。它爲什麼會拋出一個錯誤 - 任何想法?

而得到錯誤的行後,在我需要的方式成功地影響了!

幫助感謝!

+0

? – Jacooobley

回答

2
SELECT EmployeeMst.EmployeeID, EmployeePostMenuMst.MenuID, EmployeePostMenuMst.AccessLevelID,1 AS ISVISIBLE 
     INTO EmployeeMenuMst 

將嘗試創建一個表EmployeeMenuMst答填充IST,也許你正被「EmployeeMenuMst」正在與過程的每個運行中創建搜索

Insert into EmployeeMenuMst 
SELECT EmployeeMst.EmployeeID, EmployeePostMenuMst.MenuID, EmployeePostMenuMst.AccessLevelID,1 AS ISVISIBLE 
+0

如何在文件後面的代碼中將受影響的行的值返回給ExecuteNonQuery。現在代碼運行正常,但即使在影響行之後,我也會到-1值。 –

+0

@SHEKHARSHETE這聽起來像一個不同的問題 - 請考慮打開一個單獨的一個/搜索這裏作爲bummi已經回答了你原來的問題。 – Bridge

+0

k謝謝@bummi回覆我已修改上述查詢現在它工作正常! –

相關問題