我在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注入的影響。 –