J'ai une procédure stockée dans SQL Server qui renvoie deux valeurs. Lorsqu'il est appelé de QA avec le code SQL suivant:Renvoie des valeurs de la procédure stockée SQL Server
exec TWEEPush_ValidateCO @CoFilter='CO IN(''1502'',''Mike'',''Clarkson'')', @TDate='09/18/`2017'
fonctionne comme prévu en retournant deux valeurs:
@TempCOID @TempDate
1502 09/10/2017
La procédure stockée fait un travail et se termine par les deux valeurs étant fixées à la non nulle valeurs, avec la procédure stockée se terminant par:
SELECT
@TempCOID AS N'@TempCOID',
@TempDate AS N'@TempDate'
Dans VB.net (Visual Basic, pas C), j'ai essayé de nombreuses approches différentes pour obtenir les résultats, mais ont pas eu de chance. Soit je reçois une erreur indiquant que le nom ne param existe pas, ou il finit par retourner des valeurs vides (tout est codé pour éviter les valeurs NULL dans les données de retour)
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
Peu importe ce code que je l'ai essayé, le le code ne renvoie jamais les données comme prévu. Qu'est-ce que je fais de mal? Est-ce que quelqu'un peut nous éclairer s'il vous plaît?
Malgré les noms de colonnes plutôt étranges utilisés, ces "paramètres" ne sont pas réellement des paramètres. Vous obtiendrez simplement un résultat normal avec une seule ligne, avec les valeurs dans cela. Vous devriez utiliser ExecuteReader plutôt qu'ExecuteNonQuery (car il s'agit en fait d'une requête, c'est ce que fait SELECT), puis récupérer les résultats à partir de là. –
Que faire si vous vérifiez 'PramDateRet.Value' et' PramCOIDRet.Value' – JamieD77
Cette procédure ressemble étrangement à la réception d'une chaîne de caractères et à son exécution en tant que SQL dynamique. C'est très effrayant et est très probablement vulnérable à l'injection de sql. –