如何让c#忽略存储过程中的异常

QQ10149077 2010-07-15 03:41:33
大家好,
遇到了下面这个问题,向大家请教一下。

一段存储过程中间部分可能会出现异常,比如说主外键约束异常,最后select一个变量作为返回信息。

c#调用这个存储过程时,遇到了异常就停止了,无法取出存储过程返回的信息。请问该怎么处理。谢谢
...全文
225 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
LOVE_GG 2010-07-16
  • 打赏
  • 举报
回复
学习了......
Joe-xXx 2010-07-16
  • 打赏
  • 举报
回复
想办法解决存储过程发生的问题,若难以解决,再来个try{}catch{}
HolyPlace 2010-07-16
  • 打赏
  • 举报
回复
在存储过程中使用try catch返回特定的值给程序
陈言蹊 2010-07-16
  • 打赏
  • 举报
回复
学习学习
有话好好说 2010-07-16
  • 打赏
  • 举报
回复
你只需要C#里面的Catch什么都不做就可以了,这个跟你数据库的版本好像没什么关系吧?
[Quote=引用 8 楼 qq10149077 的回复:]
现在用的是sql2000数据库,应该无法使用try catch吧。

数据库里是通过错误判断向数据库插入的数据的,比如,插入一个商品信息,如果插入的产品分类ID错误,而产生主外键错误,则报告分类错误。

请有什么办法,让c#遇到数据库错误,不抛出异常的方法吗?
[/Quote]
qldsrx 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq10149077 的回复:]
现在用的是sql2000数据库,应该无法使用try catch吧。

数据库里是通过错误判断向数据库插入的数据的,比如,插入一个商品信息,如果插入的产品分类ID错误,而产生主外键错误,则报告分类错误。

请有什么办法,让c#遇到数据库错误,不抛出异常的方法吗?
[/Quote]
如果是SQL2000,就没有办法在数据库中将异常捕获,你只有做两手准备:
一是在语句正常执行时,获取返回值;另一种是当执行出错时将需要返回的信息通过raiserror来返回给程序,然后你在C#中截获catch部分的异常,用字符串匹配查找你通过异常返回的关键信息,比如你可以自定义一个异常为raiserror(@field = 123.', 16, 1) with seterror,catch捕获的异常消息中提取出这个部分的消息,就得到你的返回值了。
poloyzhang 2010-07-15
  • 打赏
  • 举报
回复
把2000升级到3000或以上.
BusyDonkey 2010-07-15
  • 打赏
  • 举报
回复
在存储过程中使用try catch
QQ10149077 2010-07-15
  • 打赏
  • 举报
回复
现在用的是sql2000数据库,应该无法使用try catch吧。

数据库里是通过错误判断向数据库插入的数据的,比如,插入一个商品信息,如果插入的产品分类ID错误,而产生主外键错误,则报告分类错误。

请有什么办法,让c#遇到数据库错误,不抛出异常的方法吗?
guohelv0519 2010-07-15
  • 打赏
  • 举报
回复
try{
//执行你的存储过程
}
catch(Exception)
{
//此处什么都不要做
}
风平心境 2010-07-15
  • 打赏
  • 举报
回复
BEGIN TRY
-- RAISERROR with severity 11-19 will cause execution to
-- jump to the CATCH block.
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();

-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;

看看帮助的里面的格式
myhope88 2010-07-15
  • 打赏
  • 举报
回复
应该把存储过程再完善下嘛
csu_dog 2010-07-15
  • 打赏
  • 举报
回复
try
{}
catch
{}

catch不做任务处理
qldsrx 2010-07-15
  • 打赏
  • 举报
回复
你可以让返回值通过自定义SQL异常信息来返回,或者你就在SQL里面用TRY-CATCH来捕获异常,让SQL可以正常运行结束。
iouuoi 2010-07-15
  • 打赏
  • 举报
回复
try
{}
catch(..)
{}
卧_槽 2010-07-15
  • 打赏
  • 举报
回复
把存储过程写好点

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧