Results 1 to 4 of 4

Thread: Using Parameters with an SQL IN Clause

Threaded View

  1. #1

    Thread Starter
    Super Moderator jmcilhinney's Avatar
    Join Date
    May 2005
    Location
    Sydney, Australia
    Posts
    111,221

    Using Parameters with an SQL IN Clause

    C# version here.

    Myself and others suggest with regularity that values be inserted into SQL statements using parameters rather than string concatenation. Using parameters is more secure, more readable, less error-prone and negates the need to escape single quotes in text values.

    Using parameters can be a bit tricky with an IN clause though, e.g.
    SQL Code:
    1. SELECT * FROM MyTable WHERE ID IN (3, 10, 17)
    You cannot use a single parameter for the whole list, but if you don't know how many values will be in the list then you can't add the parameters easily.

    The way to work around this is to use a combination of string concatenation and parameters. You build a list of parameter place holders using string concatenation, then add the corresponding parameters to the command.

    As an example, assume you have a ListBox containing possible field values. If the user can select zero, one or more of the items in the list to filter the results you could do this:
    VB.NET Code:
    1. Dim connection As New SqlConnection("connection string here")
    2. Dim command As New SqlCommand
    3. Dim query As New StringBuilder("SELECT * FROM MyTable")
    4.  
    5. Select Case Me.ListBox1.SelectedItems.Count
    6.     Case 1
    7.         query.Append(" WHERE MyColumn = @MyColumn")
    8.         command.Parameters.AddWithValue("@MyColumn", Me.ListBox1.SelectedItem)
    9.     Case Is > 1
    10.         query.Append(" WHERE MyColumn IN (")
    11.  
    12.         Dim paramName As String
    13.  
    14.         For index As Integer = 0 To Me.ListBox1.SelectedItems.Count - 1 Step 1
    15.             paramName = "@MyColumn" & index
    16.  
    17.             If index > 0 Then
    18.                 query.Append(", ")
    19.             End If
    20.  
    21.             query.Append(paramName)
    22.             command.Parameters.AddWithValue(paramName, Me.ListBox1.SelectedItems(index))
    23.         Next index
    24.  
    25.         query.Append(")")
    26. End Select
    27.  
    28. command.CommandText = query.ToString()
    29. command.Connection = connection
    Last edited by jmcilhinney; Oct 28th, 2008 at 09:35 PM.
    Why is my data not saved to my database? | MSDN Data Walkthroughs
    VBForums Database Development FAQ
    My CodeBank Submissions: VB | C#
    My Blog: Data Among Multiple Forms (3 parts)
    Beginner Tutorials: VB | C# | SQL

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width