Un grande compito per me. Ho alcune domande. Voi ragazzi mi avete già aiutato così tanto, ma ho una difficoltà dopo l'altra e progredisco incredibilmente lentamente. Queste domande descriveranno meglio i miei compiti.Passaggio di set e parametri facoltativi a una stored procedure T-SQL - ASP.NET
Ho una pagina aspx con i seguenti controlli: TextBox, CheckBoxList, DropDownList. Sono usati per specificare i criteri di ricerca. I record sono presi da SQL Server Data Base utilizzando una stored procedure.
0) È chiaro come passare un testo da TextBox per cercare un prodotto per nome. Nessuna domanda qui.
1) Ogni CheckBox in CheckBoxList ha un valore che è reale ID di un gruppo di prodotti nel database. Se è selezionata più di una casella di controllo, come passare l'elenco di ID a una stored procedure come set in modo da poter utilizzare IN @IdList? Quali tipi di variabili dovrei usare in C# e T-SQL? È possibile a tutti?
2) Il primo elemento di DropDownList è "ALL". Quando è selezionato "TUTTO", ho bisogno di passare qualcosa come NULL alla stored procedure. Come rendere la stored procedure per ignorare un parametro se è NULL?
Sono esausto, non ci sono più idee, ho persino cercato di cercare separatamente per ciascun criterio, quindi ho messo gli ID trovati in array individuali, li ho confrontati e ho composto un array risultante con ID comuni, ma c'erano numerosi problemi , ho dovuto usare matrici giganti statiche, utilizzo della memoria inefficiente, incapace di creare array dinamici, in grado di controllare intersezione di elementi non nulli solo e così via, quindi abbandonato l'idea ...
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
Ho modificato la procedura memorizzata in base al primo esempio con NULL e funziona correttamente. Grazie, aiuta davvero. Ma nel secondo esempio non sono sicuro di come passare l'elenco dei parametri da C# alla stored procedure. Posso usare un set o forse qualcos'altro? – SWA
Oh, immagino che i TVP non funzionino, io uso SQL Server 2005. I TVP non sono supportati ... Lo userò quando migrerò su Server 2008. Ma ora ho sviluppato un altro approccio: è una combinazione del tuo primo esempio e cicli. Controllo solo ** CheckBox ** in ** CheckBoxList ** e se è selezionato, prendo il suo valore ed eseguo la procedura. Se non è selezionato, passo semplicemente ** NULL **. Quindi ottengo risultati corretti) Grazie mille. Lo segnerò come risposta. Una risposta davvero utile. – SWA
Felice di sentirlo. In bocca al lupo. –