使用vb.net使用多个文本框搜索数据库

时间:2015-03-24 19:56:33

标签: asp.net vb.net

我有6个文本框和一个搜索按钮... 如果填写了一个文本框,或者填写了两个,三个文本框,我的搜索按钮应该从数据库中搜索行。即使填写了一个文本框或者所有6个文本框都已填满,搜索也应该有效

1 个答案:

答案 0 :(得分:0)

我会猜测你问题的意图。你想要:

  1. 根据一个或多个搜索词的手动输入搜索SQL Server表?
  2. 避免使用ad-hoc SQL来防止注入攻击?
  3. 如果是这样,我建议使用SQL-Server表值函数将分隔的字符串转换为表变量,该表变量可以像查询中的任何其他表一样使用。

    这是一个示例函数:

    CREATE FUNCTION [dbo].[fnVarcharListToTable](@List varchar(8000), @Delim char(1) = NULL)
    RETURNS @TableVar TABLE(ID int identity(1,1), Val varchar(256) collate database_default)
    AS
    BEGIN
        --note that each element will be trimmed of whitespace
    
        declare
            @DelimIndex     int
    
        If (@Delim IS NULL) SET @Delim = ','
    
        select @List = ltrim(rtrim(@List))
    
        if (left(@List,1) = @Delim)
            begin
                select @List = ltrim(right(@List,len(@List) - 1))
            end
    
        if (right(@List,1) = @Delim)
            begin
                select @List = rtrim(left(@List,len(@List) - 1))
            end
    
        while (CHARINDEX(@Delim, @List, 1) > 0)
        begin
            select @DelimIndex = CHARINDEX(@Delim, @List, 1)
            insert into @TableVar (Val) select left(ltrim(rtrim(left(@List,@DelimIndex-1))), 256)
            select @List = ltrim(right(@List,len(@List) - @DelimIndex))
        end
    
        if (@List) <> ''
            --get the last item
            begin
                insert into @TableVar (Val) select ltrim(rtrim(@List))
            end
    
       RETURN
    END
    

    对于客户端,假设您有一个包含6个文本框的表单,并且您希望从包含文本的文本框中传入值。你可以使用下面的机制来做到这一点:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim searchterms = String.Join("|", From textbox In {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6} Where textbox.Text <> String.Empty Select textbox.Text)
    
        If searchterms = String.Empty Then
            MessageBox.Show("No Search Terms Defined")
        End If
    
        Using cn = New SqlConnection("Server=YourServer;Integrated Security=SSPI;Database=YourDatabase")
            cn.Open()
    
            Using cmd = New SqlCommand("SELECT * FROM Customer INNER JOIN dbo.fnVarcharListToTable(@searchterms,'|') SearchTerms on SearchTerms.val = Customer.Name", cn)
                cmd.Parameters.AddWithValue("@searchterms", searchterms)
    
                Using reader = cmd.ExecuteReader()
                    While reader.Read
                        MessageBox.Show("Found: " + reader("Name").ToString())
                    End While
                End Using
            End Using
        End Using
    End Sub