ADODB.Command:准备好的声明未返回预期的记录数



我正在使用adodb.command在经典ASP中执行已准备好的语句,但是Mariadb返回的记录数量不正确,我不知道为什么。

下面的代码给出了我遇到的问题的示例:

<%
    Dim conn, comm, rs, SQL, SQLparam
    set conn = Server.CreateObject("ADODB.Connection")
    set rs = Server.CreateObject("ADODB.Recordset")
    conn.Open("DSN=localhost")
        ' Standard execution            
        SQL = "SELECT * FROM tests WHERE ID > 0"
        set rs = conn.Execute(SQL)  
        response.write "<p>Results: " & uBound(rs.getRows(),2) & "</p>"
        ' Prepared statement execution          
        SQL = "SELECT * FROM tests WHERE ID > ?"
        SQLparam = 0
        Set comm = Server.CreateObject("ADODB.Command")
            comm.ActiveConnection = conn
            comm.CommandText = SQL
            comm.Parameters.Append(comm.CreateParameter("@param",varType(SQLparam),1,250,SQLparam)) 
            set rs = comm.Execute()
            response.write "<p>Results: " & uBound(rs.getRows(),2) & "</p>"
        set comm = nothing
    rs.close() : set rs = nothing   
    conn.close() : set conn = nothing
%>

输出:

Results: 4433 ' as expected
Results: 10

我觉得我一定缺少一些明显的东西。我已经在这里概述了Microsoft概述的" CreateParameter"设置,但是MariaDB总是返回错误的记录数量,不要介意我更改的内容。

奇怪的是,如果我将SQL更改为进行选择计数,则准备好的语句返回正确的计数值,当我尝试选择它们时,它只是不会返回正确的行数。

在进行进一步测试之后,这似乎是驱动程序问题。我正在使用MariaDB,但使用MySQL ODBC连接器(8.0 Unicode驱动程序)。切换到MariadB ODBC连接器后,准备好的语句按预期工作。对于在发布之前没有进一步测试,我深表歉意。

我猜Mariadb和MySQL ODBC连接器尝试执行某些数据库功能时是不兼容的,因为直到现在我还没有遇到任何问题。

最新更新