以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 求一个健壮的代码。try catch问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=129211) |
-- 作者:18523500398 -- 发布时间:2018/12/24 10:53:00 -- 求一个健壮的代码。try catch问题 老师你好,代码中我加上了try catch。 程序因为数据全部来自于调用的外部存储过程,如果存储过程正常调用的话,程序能正常运行,但是想让代码更健壮,我把try catch加上去过后为了避免如果数据库服务器的问题导致sql执行错误,错误时弹出提示框提示错误就好了,不想因为那些原因系统弹很多系统的提示框。 贴图: 这两张图是出错过后系统出来的错误:
我的理想效果是出错过后直接提示:
|
-- 作者:18523500398 -- 发布时间:2018/12/24 10:53:00 -- 我的代码是这样写的 此主题相关图片如下:4.png |
-- 作者:18523500398 -- 发布时间:2018/12/24 10:54:00 -- 系统提示的第一个错误是执行我的那个存储过程出现的错误。我想如果出现错误的话就执行给定的其他代码 |
-- 作者:有点甜 -- 发布时间:2018/12/24 11:10:00 -- 1、你尝试开启事务,然后再执行存储过程
http://www.foxtable.com/webhelp/scr/2933.htm
2、你也可以在存储过程那里捕捉错误,如果出错,返回一个信息或者一个特殊的表,不也可以?你代码判断返回的值,做各种操作。 |
-- 作者:18523500398 -- 发布时间:2018/12/24 11:13:00 -- 甜版的意思是我在数据库的存储过程里面捕捉错误吗?
|
-- 作者:18523500398 -- 发布时间:2018/12/24 11:27:00 -- 我用事务就会出错。 此主题相关图片如下:f$9$39ahbo51sp2`k~9dvw4.png |
-- 作者:有点甜 -- 发布时间:2018/12/24 11:34:00 -- 1、贴出你所写的事务的代码。用sqlcommand执行你的存储过程啊,不要用querybuilder啊。
2、你也可以在你存储过程里面捕捉错误,最后返回成功或者失败的信息。foxtable读取返回值以后,再执行对应代码。 |
-- 作者:18523500398 -- 发布时间:2018/12/24 11:39:00 -- 以下内容为程序代码:
1 try 2 \'扑捉错误 3 Connections(_strBooks).BeginTransaction() 4 Dim s As String = Guid.NewGuid.ToString() 5 Dim q As new QueryBuilder 6 q.TableName = "金相临时" 7 q.ConnectionName=_strBooks 8 q.SelectString="EXEC GET_PROJECT_JY \'" & _t1 & "\',\'" & Vars("_jxlv_prdno") & "\',\'" & Date.Now() & "\',\'" & s & "\'" 9 q.Build 10 \'\'MessageBox.Show("查询了表成功") 11 Dim i As Integer 12 i=Tables("金相临时").Cols.Count 13 Vars("_int_tbcount")=i 14 Dim j As Integer 15 For j=0 To i-1 16 Tables("金相临时").Cols(j).RecordRowHeight=2 17 Next 18 \'\'Tables("金相临时").Cols(0).RecordRowHeight=2 19 Dim rgd As WinForm.RecordGrid = e.Form.Controls("RCDG_R") 20 Tables("金相临时").AllowEdit=True 21 rgd.Table=Tables("金相临时") 22 rgd.Build 23 Connections(_strBooks).Commit() 24 catch ex As exception 25 Connections(_strBooks).Rollback 26 MessageBox.Show("错误") 27 Return 28 End try |
-- 作者:18523500398 -- 发布时间:2018/12/24 11:40:00 -- 上面发的是代码,如果用sqlcommand执行存储过程的话,我的临时表又无法产生了,然后后面的流程就无法执行了 |
-- 作者:有点甜 -- 发布时间:2018/12/24 11:44:00 -- 以下是引用18523500398在2018/12/24 11:40:00的发言:
上面发的是代码,如果用sqlcommand执行存储过程的话,我的临时表又无法产生了,然后后面的流程就无法执行了
不是可生成dt临时表么?通过sqlcommand的ExecuteReader。得到的表格基本一样使用。 |