以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求一个健壮的代码。try catch问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=129211)

--  作者:18523500398
--  发布时间:2018/12/24 10:53:00
--  求一个健壮的代码。try catch问题

老师你好,代码中我加上了try catch。

程序因为数据全部来自于调用的外部存储过程,如果存储过程正常调用的话,程序能正常运行,但是想让代码更健壮,我把try catch加上去过后为了避免如果数据库服务器的问题导致sql执行错误,错误时弹出提示框提示错误就好了,不想因为那些原因系统弹很多系统的提示框。

贴图:

 这两张图是出错过后系统出来的错误:


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

 

我的理想效果是出错过后直接提示:

 


图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看

 


--  作者: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。得到的表格基本一样使用。