Eine große Aufgabe für mich. Ich habe ein paar Fragen. Ihr habt mir schon so viel geholfen, aber ich bekomme eine Schwierigkeit nach der anderen und komme unglaublich langsam voran. Diese Fragen beschreiben meine Aufgaben besser.Übergeben von Sätzen und optionalen Parametern an eine gespeicherte Prozedur T-SQL - ASP.NET
Ich habe eine aspx Seite mit den folgenden Kontrollen: TextBox, CheckBoxList, Dropdownlist. Sie werden verwendet, um Suchkriterien anzugeben. Die Datensätze werden aus SQL Server-Datenbank mit einer gespeicherten Prozedur entnommen.
0) Es ist klar, wie Sie einen Text von TextBox übergeben, um ein Produkt nach Namen zu suchen. Keine Fragen hier.
1) Jede CheckBox in CheckBoxList hat einen Wert, die tatsächliche ID einer Produktgruppe in der Datenbank ist. Wenn mehr als ein Ankreuzfeld ausgewählt ist, wie die Liste der IDs an eine gespeicherte Prozedur als einen Satz übergeben, so dass ich IN @IdList verwenden könnte? Welche Variablentypen sollte ich in C# und T-SQL verwenden? Ist es überhaupt möglich?
2) DropDownList das erste Element ist "ALL". Wenn "ALL" ausgewählt ist, muss ich etwas wie NULL an die gespeicherte Prozedur übergeben. Wie man die gespeicherte Prozedur macht, um einen Parameter zu ignorieren, wenn es NULL ist?
Ich bin erschöpft, keine Ideen mehr kommen, ich habe sogar versucht, nach jedem Kriterium getrennt zu suchen, dann gefundene IDs in einzelne Arrays, vergleichen sie und ein Ergebnis Array mit gemeinsamen IDs, aber es gab zahlreiche Probleme hatte ich riesige statische Arrays, ineffiziente Speichernutzung, nicht in der Lage zu erstellen dynamische Arrays, nicht in der Lage zu überprüfen Kreuzung von nur nicht-Null-Elementen zu verwenden und so weiter, ich aufgegeben, so die Idee ...
CREATE PROCEDURE FilterList
@ProductName nvarchar(200),
@ProductGroupID int
AS BEGIN
SELECT
prod_id AS 'ID',
prod_name AS 'Name'
FROM
dbo.Products
WHERE
prod_group_id = @ProductGroupID OR
prod_name = @ProductName
END
Ich änderte meine gespeicherte Prozedur nach Ihrem ersten Beispiel mit NULL und es funktioniert gut. Danke, es hilft wirklich. Aber im zweiten Beispiel bin ich nicht sicher, wie man die Liste der Parameter von C# an die gespeicherte Prozedur weitergibt. Kann ich ein Set oder etwas anderes benutzen? – SWA
Oh, ich denke, TVPs werden nicht funktionieren, ich benutze SQL Server 2005. TVPs werden nicht unterstützt ... Ich werde es verwenden, wenn ich auf Server 2008 migrieren. Aber jetzt habe ich einen anderen Ansatz entwickelt - es ist eine Kombination aus Ihrem ersten Beispiel und Zyklen. Ich überprüfe nur jedes ** CheckBox ** in der ** CheckBoxList ** und wenn es ausgewählt ist, nehme ich den Wert und die Laufprozedur. Wenn es nicht ausgewählt ist, überlasse ich nur ** NULL **. So bekomme ich korrekte Ergebnisse) Vielen Dank. Ich werde es als eine Antwort markieren. Eine wirklich hilfreiche Antwort. – SWA
Freut mich zu hören. Viel Glück. –