gpt4 book ai didi

c# - 存储过程不会返回 0

转载 作者:太空狗 更新时间:2023-10-30 00:21:36 24 4
gpt4 key购买 nike

这是我的

CREATE PROCEDURE DeteleTitle
(
@TitleID int
)
AS
BEGIN
IF EXISTS(Select TitleID from Titles WHERE TitleID=@TitleID)
BEGIN
DELETE FROM Titles WHERE TitleID=@TitleID
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 是许多表中的外键。如果某些表的记录正在使用 TitleID,则它会抛出此异常,显示“外键违规 n 东西”。在我上面的存储过程中,我在 else block 中选择零以防删除不成功。当 delete IS 成功时,它会返回 TitleID 的值,例如 50、99 或其他值。现在发生的事情是,当删除不成功时,它不会返回零。我希望根据删除存储过程返回的这个零值在屏幕上显示一条消息,但是当它没有返回任何值时(删除失败时),我在 DeleteTitle() 方法的 catch block 中返回了零。

现在我有两个问题:-

  1. 为什么存储过程在删除失败时不返回零?
  2. 是否像我在上面所做的那样在 catch block 中以正确的方式返回零?我不知道你如何检索外键异常编号和其他东西,所以我只是在 catch block 中返回零。

最佳答案

你想要一个 TRY...CATCH在您的程序中,而不是 IF...ELSE。

如果您考虑一下,当 DELETE 因外键违规而失败时,您已经处于语句的 IF 部分。您的代码怎么可能跳转到 ELSE block ?

关于c# - 存储过程不会返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4649945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com