這是我的SP存儲過程將不會返回0
CREATE PROCEDURE DeteleTitle
(
@TitleID int
)
AS
BEGIN
IF EXISTS(Select TitleID from Titles WHERE [email protected])
BEGIN
DELETE FROM Titles WHERE [email protected]
SELECT @TitleID
END
ELSE
BEGIN
SELECT 0
END
END
方法,其中我打電話是: -
public Int32 DeleteTitle(Int32 TitleID)
{
try
{
int ds=0;
SqlParameter[] sqlparam=new SqlParameter[1];
sqlparam[0]=(@TitleID,TitleID);
ds=Convert.ToInt32(SqlHelper.ExecuteScalar(ConfigurationManager.ConnectionStrings["con"].ConnectionString,CommandType.StoredProcedure,"DeleteTitle",sqlparam).Tables[0]);
return ds;
}
catch(Exception ex)
{
return 0;
}
}
現在TitleID在許多表的外鍵。如果一些Table的記錄正在使用TitleID,那麼它會拋出這個異常,說「外鍵違規n東西」。在我上面的存儲過程中,如果delete不成功,我在else塊中選擇零。當刪除成功時,它會返回TitleID的值,如50,99或其他。現在發生的是,當刪除不成功時,它不返回零。我想根據刪除存儲過程返回的零值顯示一條消息,但是當它沒有返回任何值時(刪除失敗時),我在DeleteTitle()方法的catch塊中返回零。
現在我有兩個問題: -
- 爲什麼存儲過程不返回爲零時刪除失敗了嗎?
- 在catch塊中返回零,就像我在正確的方式之上做的那樣?我不知道如何檢索外鍵異常數量和東西,所以我只是在catch塊中返回零。
你應該至少抓住一個sqlexception(我相信這是正確的,如果不查找它)。目前你在這裏可能會捕捉所有不相關的異常,並忽略它們。您應該確實捕獲特定的異常,以便任何意外的異常可以冒泡到應用程序級別的錯誤處理程序,以適當處理和記錄以及其他任何內容。 – Chris 2011-01-10 18:42:17