반응형
ADODB.Command: 준비된 문이 예상 레코드 수를 반환하지 않습니다.
ADODB를 사용하고 있습니다.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
뭔가 명백한 것을 놓치고 있는 것 같아요.Microsoft에서 설명한 "Create Parameter" 설정을 사용하여 작업했지만 변경한 내용에 상관없이 항상 잘못된 수의 레코드가 MariaDB에 의해 반환됩니다.
또한 이상한 것은 SELECT COUNT를 수행하도록 SQL을 변경하면 준비된 문이 올바른 카운트 값을 반환하고 행을 선택하려고 해도 올바른 개수의 행을 반환하지 않는다는 것입니다.
추가 테스트를 통해 이 문제는 드라이버 문제로 나타납니다.MariaDB를 사용하고 있지만 MySQL ODBC 커넥터(8.0 유니코드 드라이버)를 사용하고 있습니다.MariaDB ODBC 커넥터로 전환한 후에는 준비된 문이 예상대로 작동합니다.게시하기 전에 추가 테스트를 하지 않은 것에 대해 사과드립니다.
MariaDB와 MySQL ODBC 커넥터는 특정 데이터베이스 기능을 수행할 때 호환되지 않는 것 같습니다. 지금까지 문제가 발생한 적이 없기 때문입니다.
언급URL : https://stackoverflow.com/questions/54672438/adodb-command-prepared-statement-not-returning-expected-number-of-records
반응형
'sourcecode' 카테고리의 다른 글
mariadb의 select+update 트랜잭션을 원자적으로 실행할 수 없습니다. (0) | 2023.07.28 |
---|---|
사용자 MVCEF Core를 기반으로 다른 데이터베이스에 연결 (0) | 2023.07.28 |
Angular App의 구문 오류: 예기치 않은 토큰 < (0) | 2023.07.28 |
PowerShell에서 문자열을 datetime으로 변환 (0) | 2023.07.28 |
HTML 양식 데이터를 JSON으로 서버에 보내는 방법은 무엇입니까? (0) | 2023.07.28 |