SQL Abfrage mit @ Parametern - wie bei dynamischer Anzahl von Parametern?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    SQL Abfrage mit @ Parametern - wie bei dynamischer Anzahl von Parametern?

    Ich habe einen SQL

    SQL-Abfrage

    1. SELECT * FROM tabelle WHERE iArtikel IN (1,2,3,..x)


    Die Anazhl der Elemente ist zur designzeit nicht bekannt und das Ergenis einer Nutzereingabe. Wie setze ich das am besten mit einem SQL Command mit Parametern um?
    Im Netz stoße ich nur auf Bespiele, bei denen eine definierte Anzahl von Parametern behandelt wird.

    Oder genügt es, wenn ich den Ausdruck in Klammern als String zusammen bastele und als einen Paramter übergebe?

    Vielen Dank

    John

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „John422“ ()

    Meines Wissens nach kann man solche Attribute nicht mit Parametern übergeben.
    Das ist einige der wenigen Ausnahmen, in denen ich das Sql Statement "händisch" zusammenbaue.

    Das "Problem" beim Verwenden von Parametern ist, dass diese keine Werte wie 1,2,3 ... verstehen und alles, was hinter dem ersten "," kommt, ausgeschlossen wird.
    Sollte es dennoch möglich sein, wäre ich an einer Lösung natürlich auch interessiert:)

    Hier mal mein Beispiel wie ich es mache, als Extension für List (Of Integer)

    VB.NET-Quellcode

    1. <Extension()> Public Function ToSql(Values As List(Of Integer),
    2. Optional RemoveZeroEntries As Boolean = True) As String
    3. Const SqlSeparator As String = ", "
    4. If Values Is Nothing OrElse Values.Count = 0 Then Return String.Empty
    5. If RemoveZeroEntries Then Values.RemoveAll(Function(R) R <= 0)
    6. Dim SB As New StringBuilder
    7. With SB
    8. For Each Value In Values
    9. .Append(Value & SqlSeparator)
    10. Next
    11. If .ToString.EndsWith(SqlSeparator) Then .Remove(.Length - SqlSeparator.Length, SqlSeparator.Length)
    12. Return .ToString()
    13. End With
    14. End Function


    Aufruf wäre

    VB.NET-Quellcode

    1. Public Sub machwas(IDs As List(Of Integer))
    2. Dim WhereInClause = Tables.tbl_Users.TableName & "." & Tables.tbl_Users.Columns.PrimaryKey & " IN " & "(" & IDs.ToSql & ")")
    3. ...
    4. End Sub