C# mit SQL Server-WÄHLEN Sie, WO Sie IN mit Daten-Liste
Ich habe eine SQL-Server-Datenbank mit person_id
- und name-Felder.
In meiner Anwendung habe ich eine Reihe von person_id
, die ich brauche, um aus meiner Datenbank, Personen-Datensätze mit ids von meinem array.
- Welche version von .Netz verwenden Sie? Zeigen Sie, was Sie bisher ausprobiert haben?
- Welche Technologie verwenden Sie für die Verbindung zu SQL server? Raw SqlCommands, Typisierte DataSets, LINQ-to-SQL, Entity Framework?
- Nein, ich nur verwendet sql.
- Es ist "select Person_Name von tbl_Person_Info where Person_Id in (" + PersonIdList + ")"
- Welche version von SQL Server und .NETZ verwenden Sie? SQL Server 2008 ermöglicht Tabellenwert-Parameter. Könnten Sie
select Person_Name from tbl_Person_Info where Person_Id in (select * from @PersonIdList)
, dann übergeben Sie einen DataTable mit Ihren IDs als parameter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen einfach nur den SQL-string sollte diese Arbeit:
Beachten Sie, dass es ein limit (2000, glaube ich) auf die Anzahl der Elemente erlaubt, die in der IN-Klausel. Auch, je nachdem, welche version .NET das du verwendest
string.Join
könnte verschiedene argument-Typen, die nicht erlauben, eine Liste von ganzen zahlen (sind Sie Integer?) verwendet zu werden. Haben Sie vielleicht zu konvertieren Zeichenfolgen, bevor Sie sich Ihnen anzuschließen.BEARBEITEN: Bitte beachten Sie, dass, wenn die PersonIdList Artikel kommen aus Benutzereingaben (und Saiten), das ist sehr gefährlich. Ich würde vorschlagen, mit einem neueren .NET-Technologie in jedem Fall, die erlauben würde, Sie zu handhaben, viel mehr sicher -- wie LINQ oder EF.
@p1
,@p2
, ...), dann fügen Sie entsprechende parameter-Werte für Sie.Nun siehe die furchtbare macht des Tabellenwert-parameter! (vorausgesetzt, Sie verwenden SQL Server 2008)
Im wesentlichen, dies ist das Mittel zu übergeben, das array von ganzen zahlen richtig eingegeben haben, um eine gespeicherte Prozedur... also: keine string-Verkettung /sql-injection. Vor allem dies alles dreht sich um das erstellen einer SQL-Tabelle vom Typ mit einem einzigen integer-Spalte... dann haben Sie gerade den pass ein .NET DataTable (der gleichen Struktur), um eine gespeicherte Prozedur erwartet, sagte der Typ.
Schritt #1: Erstellen einer Tabelle-Typ (auf SQL Server) für die übergabe einer Reihe von zahlen. Sie müssen diese Einstellung nur einmal so nicht gehen, legen Sie Sie in der gespeicherten Prozedur.
Schritt #2: Erstellen Sie eine stored procedure (SQL Server).
Schritt 3: Rufen Sie Ihre gespeicherten Prozedur von C#