我正在使用ADODB.Command在Classic 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
我觉得我必须缺少明显的东西。我一直在使用“ CreateParameter”设置as outlined by Microsoft here进行操作,但是MariaDB总是返回错误的记录数,不用管我更改了什么。
还有一个奇怪的是,如果我将SQL更改为SELECT COUNT,则准备好的语句将返回正确的计数值,但是当我尝试选择它们时,它不会返回正确的行数。
答案 0 :(得分:1)
经过进一步测试,这似乎是驱动程序问题。我使用的是MariaDB,但使用的是MySQL ODBC连接器(8.0 Unicode驱动程序)。切换到MariaDB ODBC连接器后,准备好的语句将按预期工作。对于在发布前不进行进一步测试,我深表歉意。
我想在尝试执行某些数据库功能时,MariaDB和MySQL ODBC连接器不兼容,因为到目前为止,我从未遇到过任何问题。