Aufrufen von SQL-Funktion mit mehreren Parametern aus C# - web-Seite
Habe ich eine MS-SQL-Funktion, die aufgerufen wird mit der folgenden syntax:
SELECT Field1, COUNT(*) AS RecordCount
FROM GetDecileTable('WHERE ClientID = 7 AND LocationName = ''Default'' ', 10)
Den ersten parameter übergibt eine bestimmte WHERE
- Klausel, die verwendet wird, um die Funktion für eine der interne Abfragen. Wenn ich diese Funktion aufrufen, in der front-end-C# - Seite, ich brauche zum senden von parameter-Werten für die einzelnen Felder innerhalb der WHERE
- Klausel (in diesem Beispiel beide die ClientID
& LocationName
Felder)
In der aktuellen C# - code sieht wie folgt aus:
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();
Wenn ich dies mache, bekomme ich den folgenden code aus dem SQL-profiler:
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'
Wenn diese ausgeführt wird, die SQL wirft eine Fehlermeldung, dass es nicht Parsen kann über die erste Erwähnung von @ClientID
besagt, dass die Skalare Variable @ClientID
definiert werden müssen. Wenn ich den code ändern, Variablen deklarieren (siehe unten), dann bekomme ich eine Fehlermeldung bei der zweiten Erwähnung von @ClientID
dass die variable bereits existiert.
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'
Ich weiß, dass diese Methode zum hinzufügen von Parametern und den Aufruf von SQL-code aus C# funktioniert gut, wenn ich die Auswahl von Daten aus Tabellen, aber ich bin nicht sicher, wie einbetten von Parametern innerhalb der ' Anführungszeichen für die embedded WHERE
- Klausel an die Funktion übergeben wird.
Irgendwelche Ideen?
InformationsquelleAutor Marshall | 2010-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
war
sollte
Ihre Variablen werden im string, wo Sie gelten nur als Teil davon.
InformationsquelleAutor Andrey