2つの値を返すストアドプロシージャがSQL Serverにあります。次のSQLコードとQAから呼び出された場合:SQL Serverストアドプロシージャの戻り値
exec TWEEPush_ValidateCO @CoFilter='CO IN(''1502'',''Mike'',''Clarkson'')', @TDate='09/18/`2017'
2つの値を返すことで期待どおりに動作します:
@TempCOID @TempDate
1502 09/10/2017
ストアドプロシージャは、いくつかの作業を行い、二つの値が非nullに設定された状態で終了します値は、で終わるストアドプロシージャで:VB.net(Visual Basicのではなく、C)では
SELECT
@TempCOID AS N'@TempCOID',
@TempDate AS N'@TempDate'
、私は結果を得るために多くの異なるアプローチを試してみたが、運がなかったしています。私は、paramという名前が存在しない、またはそれがどんなに私が試したどのようなコード空の値(すべてが戻りデータにNULL値を防ぐためにコード化された)
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
を返す終わるというエラーを取得するのいずれかコードは期待どおりにデータを返すことはありません。 私は何が間違っていますか?誰かがこれでいくつかの光を発することができますか? -
これらの「パラメータ」は実際にはパラメータではありません。あなたはその中にある値を使って、その中に1つの行がある通常の結果セットを返します。 ExecuteNonQueryではなくExecuteReaderを使うべきです(なぜなら、実際にはクエリであり、それが 'SELECT'がやっていることです)、そこでそこから結果を取得するからです。 –
'PramDateRet.Value'と' PramCOIDRet.Value'をチェックした場合 – JamieD77
そのプロシージャは、文字列を受け取って動的SQLとして実行しているような疑いがあります。これは非常に恐ろしく、SQLインジェクションの脆弱性が非常に高い可能性があります。 –