VB.net搜索查询使用两个参数

时间:2015-09-18 17:02:59

标签: sql database vb.net datasource

我使用datasource在VB.net中创建了一个搜索查询,该数据源有两个参数。

SELECT        [Product Code], Description, Input_Date, Price, Unit, Quantity, Markup, Total
FROM            Inventory_Table
WHERE        (? = ?)

我创建了两个参数,因为我想按特定列搜索,这就是我使用查询的方式:

  Inventory_TableTableAdapter.SearchQuery(DBDataSet1.Inventory_Table, InvSearchCombo.Text, InvSearchTxt.Text)

第一个参数是包含表格中所有列的下拉组合框,第二个参数是输入文本框。

但每当我尝试搜索时,都会出现任何内容。 什么似乎是问题?我真的想实现这种搜索功能。提前谢谢。

2 个答案:

答案 0 :(得分:2)

在此,您可以使用动态代码

Dim columnQuery As String = "Description"

Using command As New SqlCommand( "select Description,Input_Date from dep where " &  columnQuery  & " = @par1", connection)

command.Parameters.AddWithValue("@par1", "descripcion")

End using

修改

更好的形式可能是:

首先,创建商店程序:

CREATE PROCEDURE SP_LIST_TABLA_BY_DYNAMIC_COLUMN
@PAR_COLUMN VARCHAR(20),
@PAR_VALUE VARCHAR(20)
AS

DECLARE @STRSQL NVARCHAR(MAX)

SET @STRSQL  = 'SELECT PRODUCT_CODE,DESCRIP,INPUT_DATE FROM INVENTORY_TABLE WHERE ' + @PAR_COLUMN + ' = ' + @PAR_VALUE

EXEC sp_executesql @STRSQL

然后调用它:

Using command As New SqlCommand( "SP_LIST_TABLA_BY_DYNAMIC_COLUMN", connection)
    command.CommandType = CommandType.StoredProcedure
    command.Parameters.AddWithValue("@PAR_COLUMN", "product_code")
    command.Parameters.AddWithValue("@PAR_VALUE", "1")

    Using reader As SqlDataReader = command.ExecuteReader()
        While reader.Read() 


    End While
    End using

End using

但是像用户@Basic所说:如果列名来自用户输入(即使是通过数据库),那么你将容易受到SQL注入攻击

可以评估一个建议是par_column名称存在且par_value没有一些特殊字符。

答案 1 :(得分:0)

想象一下,您有一个组合过滤器并将ID保存为@par1,文本字段保存为@par2

Combo有这个值:

  • none(id:-999)
  • field1(id:0)
  • field2(id:1)
  

不确定如何设置参数,因此我将使用一些伪代码。

您可以制作动态设置要使用的过滤器的技巧。

SELECT  *
FROM    Inventory_Table
WHERE        
    (Field1 = @par2 and 0 = @par1)
OR  (Field2 = @par2 and 1 = @par1)
OR  (-999 = @par1)

因此,如果您选择Field1,那么0 = @par1将为真,并且第一个过滤器将处于活动状态

如果您选择Field2,那么1 = @par1将为true,第二个过滤器将处于有效状态

如果选择none,则返回所有行。