我正在遇到一个问题,因为我的VS2008
无效,因此想要获取error_id。
我有一个返回一些输出的过程,当给定数据中有错误时,它会在第二个sql语句中返回error_id(或者null就是一切正常):
declare @p6 int
set @p6=NULL
exec Rec_EdStk_EdZB_Sub1_Sp N'2',N'1207',1,5,5,@p6 output
select @p6
所以我需要的是在我的VS2008
项目中获得第二个sql结果。
我写了一些代码:
Dim dta As New DataTable
Dim con As New SqlConnection
Dim cmd As New SqlCommand
Dim reader As SqlDataReader
Dim quer As String = "declare @p6 int "
quer += " set @p6=NULL "
quer += " exec Rec_EdStk_EdZB_Sub1_Sp N'2',N'1207',1,5,5,@p6 output "
quer += " select @p6 "
Try
con.ConnectionString = "server=TRAIN;database=DB;uid=test;pwd=test"
con.Open()
cmd.Connection = con
cmd.CommandText = quer
reader = cmd.ExecuteReader()
con.Close()
Catch
MsgBox("Connection error")
End Try
当我尝试从数据中提取数据时,我从第一个结果输出中得到了我想要的任何东西
例如,如果我写MsgBox(dta.Rows(0)(1))
,我从第二列第一行得到值1
但是如何从声明的参数@p6
(在这种情况下为空)中获取值,在另一个sql结果表中给出哪个输出?
********* **********编辑
如果有人建议使用数据集,请提供一个示例,因为我无法使用数据集获取error_id值:
答案 0 :(得分:0)
这是因为您使用的是DataReader。 输出参数仅在DataReader关闭后可用 来自Microsoft support:
<强>原因强>
使用DataReader对象时,在数据流的末尾返回输出参数。解决强>
使用DataReader时,必须先关闭它或读取数据的末尾,然后才能看到输出参数。
这就是我在需要输出参数时更喜欢使用数据集的原因。