Asp classic ASP Classic的正确ASP字符串连接

Asp classic ASP Classic的正确ASP字符串连接,asp-classic,Asp Classic,我在为SQL命令正确格式化字符串时遇到问题我设置了三个变量: Dim pastMonth, currentMonth, futureMonth currentMonth = Month(Date()) pastMonth = currentMonth-1 futureMonth = currentMonth+1 我试图设置的字符串是: strSQL="SELECT * FROM Project WHERE P_MONTH BETWEEN " & pastMonth &" AND

我在为SQL命令正确格式化字符串时遇到问题我设置了三个变量:

Dim pastMonth, currentMonth, futureMonth
currentMonth = Month(Date())
pastMonth = currentMonth-1
futureMonth = currentMonth+1
我试图设置的字符串是:

strSQL="SELECT * FROM Project WHERE P_MONTH BETWEEN " & pastMonth &" AND " & futureMonth
根据其他资源,符号&symbol似乎是连接变量的正确用法,但错误指出:

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression. 

想法?谢谢你的帮助和帮助

是的,使用与是连接字符串的方法

日期可能需要撇号,如下所示:

strSQL="SELECT * FROM Project WHERE P_MONTH BETWEEN '" & pastMonth &"' AND '" & futureMonth & "'"
但我强烈建议您改变方法,使用参数化查询来执行此操作

我在经典asp中使用的代码如下所示:

public function select_rst(sql, parameterArray)
    dim cnx, cmd, i
    Set cnx=CreateObject("ADODB.Connection")
    cnx.Open wfDataConnection       
    Set cmd = CreateObject("ADODB.Command")
    With cmd    
        .CommandText = sql
        .CommandType = adCmdText
        .ActiveConnection = cnx 
        if isArray(parameterArray) then             
            for each i in parameterArray
                .Parameters.Append .CreateParameter(i(0), i(1), i(2), i(3), i(4))
            next
        end if
    end with
    Set select_rst = CreateObject("ADODB.Recordset")
    With select_rst
        .CursorLocation = adUseClient
        .Open cmd
        Set .ActiveConnection = Nothing
    End With            
    Set cmd = Nothing
    cnx.close
    set cnx=nothing     
end function
这样称呼:

dim sql, parameterArray
sql = "SELECT * FROM Project WHERE P_MONTH BETWEEN ? AND ?"
parameterArray = Array(_
                     Array("@p1", adInteger, adParamInput, , pastMonth)_
                    , Array("@p2", adInteger, adParamInput, , futureMonth)_
                 )

set rst = select_rst(sql, parameterArray)

    '....do stuff with rst...

set rst = nothing

在创建参数时,我不太确定变量名(@p1、@p2等)。变量的名称似乎并不重要,但它们确实需要某种名称才能工作

我确实回答了,但我发现你只是在比较月份,不是一个合适的日期。月份是否以整数形式存储在数据库中?这是一个很好的问题Martin,在这个特定的例子中,我设置了“视图”来对特定的信息进行排序,它是以下拉菜单的形式出现的,因此用户可以选择字符串值“new”“hold”,并将记录分配给特定的月份。有了这个组合,我认为最合适的方法是使用字符串值。除非有更好的方法来实现这一点?我不是100%确定,但我认为大多数数据类型都可以使用撇号连接到sql中。例如,可以将一个整数放入如下sql语句:
..”&intValue&“…
,与
..”&strValue&“…
..”&dateValue&“…
相同。我非常感谢您的帮助,并感谢您对创建参数化查询的更多见解!我将在使用现有代码进行附加测试后立即开始实现此方法。此方法确实需要您知道参数的数据类型-adInteger、adDbTimestamp、adVarChar等。