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

Schreibe einen Kommentar