To duże zadanie dla mnie. Mam kilka pytań. Już bardzo mi pomogliście, ale dostaję jedną trudność za drugą i postępuję niewiarygodnie powoli. Te pytania lepiej opisują moje zadania.Przekazywanie zestawów i opcjonalne parametry do procedury składowanej T-SQL - ASP.NET
Mam stronę aspx z następujących opcji: tekstowym CheckBoxList, DropDownList. Służą do określania kryteriów wyszukiwania. Zapisy są pobierane z bazy danych SQL Server przy użyciu procedury składowanej.
0) Jest oczywiste, jak przekazać tekst z TextBox, aby wyszukać produkt według nazwy. Brak pytań tutaj.
1) Każdy CheckBox w CheckBoxList ma wartość, która jest rzeczywisty identyfikator grupy produktów w bazie danych. Jeśli zaznaczono więcej niż jedno pole wyboru, jak przekazać listę identyfikatorów do procedury składowanej jako zestaw, aby można było użyć IN @IdList? Jakie typy zmiennych należy używać w C# i T-SQL? Czy to w ogóle możliwe?
2) Pierwsza pozycja DropDownList to "ALL". Po wybraniu "ALL", muszę przekazać coś podobnego do procedury przechowywanej, np. NULL. Jak uczynić procedura składowana zignorować parametr, jeśli jest to NULL?
Jestem wyczerpany, żadne pomysły nie nadchodzą, próbowałem nawet wyszukiwać według każdego kryterium osobno, a następnie umieszczać znalezione identyfikatory w poszczególnych tablicach, porównywać je i komponować wynikową tablicę z typowymi identyfikatorami, ale było wiele problemów musiałem użyć gigantyczne statycznych tablic, nieefektywnego wykorzystania pamięci, niezdolnymi do tworzenia dynamicznych tablic, w stanie sprawdzić przecięcie tylko elementów niezerowych i tak dalej, więc porzuciłem ten pomysł ...
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
Zmodyfikowałem moją procedurę przechowywaną zgodnie z pierwszym przykładem z NULL i działa dobrze. Dziękuję, to naprawdę pomaga. Ale w drugim przykładzie nie jestem pewien, jak przekazać listę parametrów od C# do procedury przechowywanej. Czy mogę użyć zestawu, czy może czegoś innego? – SWA
Och, domyślam się, że TVP nie będą działały, ja używam SQL Server 2005. TVP nie są obsługiwane ... Użyję tego podczas migracji do serwera 2008. Ale teraz opracowałem inne podejście - to połączenie twojego pierwszego przykład i cykle. Właśnie sprawdzam każdy ** CheckBox ** w ** CheckBoxList ** i jeśli jest wybrany, biorę jego wartość i uruchamiam procedurę. Jeśli nie jest zaznaczone, po prostu przekazuję ** NULL **. Dostaję poprawne wyniki) Dziękuję bardzo. Zaznaczę to jako odpowiedź. Naprawdę pomocna odpowiedź. – SWA
Miło to słyszeć. Powodzenia. –