我一整天都在寻找适合我情况的解决方案。我找到了一些非常相似的东西但是对我的情况不起作用,我试过了。
这是场景;我有两个桌子底座和partdetails。我有一个asp网站(仅限内部),它有下拉列表,用于选择填充数据网格视图的SQL查询的参数。
我的问题是,我需要能够根据页面上的下拉列表框分配要搜索的条件的列名。
这是我想要定义的查询:(这个返回0行)
sqlCmd.CommandText = ("Select ba.referenceid, ba.partnum, pd.width, pd.length, CONVERT(varchar(12), pd.dateentered, 101) As [dateentered], ba.partqty, ba.status, ba.material From tbl_dlbase ba Join tbl_partdetails pd On ba.referenceid = pd.referenceid Where Case @field1 When 'part #' Then 'ba.partnum' When 'Spacing' Then 'pd.spacing' When 'Surface' Then 'pd.surface' When 'Height' Then 'pd.height' When 'Thickness' Then 'pd.thickness' End Like '%' + @criteria1 + '%'")
sqlCmd.Parameters.AddWithValue("@field1", ddlSc1.SelectedItem.Text)
sqlCmd.Parameters.AddWithValue("@criteria1", txbCriteria1.Text)
这是我尝试过的最新版本的SQL语句。我需要能够根据asp页面上的下拉列表ddlsc1中的选择设置字段/列名称。
我也一直在Studio管理器中尝试查询,看看我是否有胖手指,但它也返回0行,所以我知道查询有问题。
那么如何使用名称参数设置列名字段。我知道这是SQL注入的一个巨大的安全问题,但这是一个内部唯一的站点,更重要的是我的老板说他希望它完成变量。
答案 0 :(得分:2)
除了你的THEN
值附近有单引号外,我真的没有看到这个问题。这样可以解决吗?
SELECT ba.referenceid
,ba.partnum
,pd.width
,pd.length
,CONVERT(VARCHAR(12), pd.dateentered, 101) AS [dateentered]
,ba.partqty
,ba.STATUS
,ba.material
FROM tbl_dlbase ba
JOIN tbl_partdetails pd ON ba.referenceid = pd.referenceid
WHERE CASE @field1
WHEN 'part #'
THEN ba.partnum
WHEN 'Spacing'
THEN pd.spacing
WHEN 'Surface'
THEN pd.surface
WHEN 'Height'
THEN pd.height
WHEN 'Thickness'
THEN pd.thickness
END LIKE '%' + @criteria1 + '%'