这是我的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