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

标签 sql database vb.net 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)

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

但是每当我尝试搜索时,什么也不会出现。 似乎是什么问题?我真的很想实现这种搜索功能。提前致谢。

最佳答案

在这里你可以使用动态代码

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 注入(inject)攻击

一个建议是评估 par_column name 是否存在并且 par_value 没有一些特殊字符。

关于sql - 使用两个参数的 VB.net 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657425/

相关文章:

sql - 如何使用单个语句而不是多个步骤来填充 SQL 表中的空白

python - 如何在sqlalchemy中使用多对多

database - 单独数据库表中的人名结构

vb.net - 函数中的递归值

php - mysql查询错误输出

sql - Oracle 触发器 - :new have when nothing is passed? 有什么值(value)

mysql - 命令文本属性尚未正确初始化

asp.net - 如何在web.config中配置smtp设置

javascript - 在文本字段中输入时显示预制建议列表

database - 多次加入日期维度? - Kimball 关于数据仓库和维度建模的书