【问题标题】:change the below to parameterized query With conditions将以下更改为带有条件的参数化查询
【发布时间】:2015-05-27 11:10:16
【问题描述】:

如何将以下内容更改为具有 if 条件的参数化查询...?我想让它成为参数化查询 qith 命令对象...

strQry="SELECT distinct EnrolID" &_
        " FROM " & strview & " WHERE ProgramID=" &vP&_
        " AND EnrolStatus = 'ZZY' AND CampusID=" &vC


if vW <> "" THEN           
    strQry=strQry + " AND WID like '%" &WID& "%'"   
end if
    if vBID<>0 THEN 
        strQry=strQry + " AND BID=" &vBID           
    end if              
if vProgramID= "2" then 
    if vT<>0 THEN
        strQry=strQry + " AND eid=" &vT         
    end if

    if vYr<>0 THEN  
        strQry=strQry + " AND Year(A_Dt)=" &vY          
    end if       
end if
strQry = strQry + " ORDER BY EN"
set objRS=createObject("ADODB.recordset")
obj.Open strQry, Conn

【问题讨论】:

  • 你不能参数化表名(或任何其他标识符),并且添加像ANDs 这样的东西也需要动态SQL(所以你被这些部分的串联卡住了)。您只能参数化变量(如条件中使用的变量)。为什么要动态选择从哪个表/视图中获取数据? YEAR(A_dt) 会忽略索引(你应该使用范围查询),除了有一个糟糕的列名。
  • 如果代码只是更新查询。我如何才能使其参数化查询保持 if 条件检查完整
  • @Papai 首先你是在使用.net 还是asp-classic 我问这个是因为它们是两种不同的技术,已经让那些试图为你提供答案的人感到困惑。另外,您肯定使用mysql 还是sql-server

标签: mysql sql .net vb.net asp-classic


【解决方案1】:

首先,您的基本查询没有参数化。我已经在下面解决了这个问题,但是如果你的 strview 变量是未经处理的用户输入(而不是,例如,你声明的常量)那么你仍然很容易受到 SQL 注入的攻击。 strong> 那就是说:

Dim SQLCmd As New MySqlCommand

strQry="SELECT distinct EnrolID" &_
    " FROM " & strview & " WHERE ProgramID = @ProgramID" &_
    " AND EnrolStatus = 'ZZY' AND CampusID = @CampusID"

SQLCmd.Parameters.AddWithValue("@ProgramID", vP)
SQLCmd.Parameters.AddWithValue("@CampusID", vC)

If vW <> "" Then           
    strQry = strQry + " AND WID like @WID"
    SQLCmd.Parameters.AddWithValue("@WID", "%" & WID & "%")  
End If
If vBID <> 0 Then 
    strQry = strQry + " AND BID = @BID"
    SQLCmd.Parameters.AddWithValue("@BID", vBID)          
End If              
If vProgramID = "2" Then 
    If vT <> 0 Then
        strQry = strQry & " AND eid = @eID"
        SQLCmd.Parameters.AddWithValue("@eID", vT)        
    End If

    If vYr <> 0 Then  
        strQry = strQry& " AND Year(A_Dt) = @Year"
        SQLCmd.Parameters.AddWithValue("@Year", vY)         
    End If       
End If
strQry = strQry & " ORDER BY EN"
SQLCmd.CommandText = strQry

【讨论】:

  • 原始代码是 asp-classic 不要认为 OP 想要 .net 一个,即使他们已将其标记为这样。
  • 说真的谁赞成这个,人们真的在赞成答案之前阅读了这个问题吗?
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2020-06-20
  • 2020-01-29
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
相关资源
最近更新 更多