我在SQL Server中有一个返回两个值的存储过程。当从QA调用下面的SQL代码:SQL Server存储过程的返回值
exec TWEEPush_ValidateCO @CoFilter='CO IN(''1502'',''Mike'',''Clarkson'')', @TDate='09/18/`2017'
它按预期工作通过返回两个值:
@TempCOID @TempDate
1502 09/10/2017
存储过程做了一些工作,并与这两个值被设置为非空结束值,与存储过程与结局:
SELECT
@TempCOID AS N'@TempCOID',
@TempDate AS N'@TempDate'
在VB.net(Visual Basic中,不C),我已经尝试了许多不同的方法得到的结果,但有没有运气。要么我得到一个错误说命名的参数不存在,或者它最终返回空值(一切都被编码,以防止在空值返回数据)
Dim sConnectStr As String = GetSQLConnectionString()
Try
Using Connection As New SqlConnection(sConnectStr)
Connection.Open()
Dim Command As New SqlCommand("dbo.TWEEPush_ValidateCO", Connection)
Command.CommandType = CommandType.StoredProcedure
Command.Parameters.AddWithValue("@CoFilter", Filter)
Command.Parameters.AddWithValue("@TDate", Now())
Dim PramCOIDRet As New SqlParameter
PramCOIDRet.ParameterName = "@TempCOID"
PramCOIDRet.SqlDbType = SqlDbType.NVarChar
PramCOIDRet.Size = 30
PramCOIDRet.Direction = ParameterDirection.Output
Dim PramDateRet As New SqlParameter
PramDateRet.ParameterName = "@TempDate"
PramDateRet.SqlDbType = SqlDbType.NVarChar
PramDateRet.Size = 30
PramDateRet.Direction = ParameterDirection.Output
Command.Parameters.Add(PramCOIDRet)
Command.Parameters.Add(PramDateRet)
Command.ExecuteNonQuery()
Dim COID as string = Command.Parameters("@TempCOID").Value
Dim CoDate as Date = CDate(Command.Parameters("@TempDate").Value)
End Using
Catch ex As Exception
End Try
无论什么样的代码我已经试过了,代码永远不会按预期返回数据。 我在做什么错?请有人请说明一下这个问题吗?
尽管使用了相当奇怪的列名,那些“参数”实际上并不是参数。你会得到一个正常的结果集,其中有一行,其中的值。你应该使用ExecuteReader而不是ExecuteNonQuery(因为它实际上是一个查询;这就是'SELECT'的作用),然后从那里获取结果。 –
如果您检查'PramDateRet.Value'和'PramCOIDRet.Value',该怎么办? – JamieD77
该过程看起来像它正在接收一个字符串并将其作为动态sql执行。这是非常可怕的,很可能容易受到sql注入的影响。 –