J'ai une fonction MS SQL qui est appelée avec la syntaxe suivante:Comment appeler la fonction SQL avec plusieurs paramètres de C# page web
SELECT Field1, COUNT(*) AS RecordCount
FROM GetDecileTable('WHERE ClientID = 7 AND LocationName = ''Default'' ', 10)
Le premier paramètre passe une clause WHERE
spécifique qui est utilisé par la fonction pour l'une des requêtes internes. Quand j'appelle cette fonction dans la page C# front-end, je dois envoyer des valeurs de paramètres pour les champs individuels à l'intérieur de la clause WHERE
(dans cet exemple, les ClientID
& LocationName
champs)
Le code actuel C# ressemble ceci:
String SQLText = "SELECT Field1, COUNT(*) AS RecordCount FROM GetDecileTable('WHERE
ClientID = @ClientID AND LocationName = @LocationName ',10)";
SqlCommand Cmd = new SqlCommand(SQLText, SqlConnection);
Cmd.Parameters.Add("@ClientID", SqlDbType.Int).Value = 7; // Insert real ClientID
Cmd.Parameters.Add("@LocationName", SqlDbType.NVarChar(20)).Value = "Default";
// Real code uses Location Name from user input
SqlDataReader reader = Cmd.ExecuteReader();
Quand je fais cela, je reçois le code suivant de SQL profileur:
exec sp_executesql N'SELECT Field1, COUNT(*) as RecordCount FROM GetDecileTable
(''WHERE ClientID = @ClientID AND LocationName = @LocationName '',10)',
N'@ClientID int,@LocationID nvarchar(20)',
@ClientID=7,@LocationName=N'Default'
Lorsque cette exécute, SQL renvoie une erreur qu'il ne peut pas analyser passé le premier mention de @ClientID
indiquant que la variable scalaire @ClientID
doit être définie. Si je modifie le code pour déclarer les variables en premier (voir ci-dessous), alors je reçois une erreur à la deuxième mention de @ClientID
que la variable existe déjà.
exec sp_executesql N'DECLARE @ClientID int; DECLARE @LocationName nvarchar(20);
SELECT Field1, COUNT(*) as RecordCount FROM GetDecileTable
(''WHERE ClientID = @ClientID AND LocationName = @LocationName '',10)',
N'@ClientID int,@LocationName nvarchar(20)',
@ClientID=7,@LocationName=N'Default'
Je sais que cette méthode d'ajout de paramètres et d'appeler le code SQL de C# fonctionne bien quand je suis la sélection des données à partir de tables, mais je ne suis pas sûr de savoir comment intégrer les paramètres à l'intérieur des «marques de devis pour la intégré WHERE
clause étant passée à la fonction.
Des idées?
Merci, mais cela ne correspond pas à la facture dans cette situation. Le problème vient à cause des guillemets intégrés dans la clause sub-WHERE. – Marshall