Bug #112272 Connector/ODBC parametrized query and transaction with char type get error
Submitted: 6 Sep 8:00 Modified: 6 Sep 8:26
Reporter: Simone Abello Email Updates:
Status: Analyzing Impact on me:
None 
Category:Connector / ODBC Severity:S3 (Non-critical)
Version:8.0.33 - 8.1 OS:Windows
Assigned to: MySQL Verification Team CPU Architecture:Any

[6 Sep 8:00] Simone Abello
Description:
In classic asp when use a transaction with parametrized query if i set the type of parameter as adChar, adVarChar, adBSTR in a char field get this error:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

La transazione non supporta set di record multipli con questo tipo di cursore. Modificare il tipo di cursore, eseguire il commit della transazione oppure chiudere uno dei set di record.

if i comment the line with text parameter the query work fine.

How to repeat:
Use this code in classic asp
Set ConnStoricoUBI = Server.CreateObject("ADODB.Connection")
ConnStoricoUBI.Open("DRIVER={MySQL ODBC 8.0 UNICODE Driver};port=3306;SERVER=127.0.0.1;UID=XXX;PWD=XXX;database=test;charset=UTF8;")

ConnStoricoUBI.BeginTrans

SQLSTO = "INSERT INTO storicoUbi (codScatola, scatola, codArch, codUbicazioneOLD, UbicazioneOLD, codUbicazioneNEW, UbicazioneNEW, data, codOpe) "& _
			" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"
SQLSTO = "INSERT INTO storicoUbi (codScatola, scatola, codArch, codUbicazioneOLD, UbicazioneOLD, codUbicazioneNEW, data, codOpe) "& _
			" VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
'SQLSTO = "INSERT INTO storicoUbi (codScatola, scatola, codArch, codUbicazioneOLD,  codUbicazioneNEW, data, codOpe) "& _
'			" VALUES (?, ?, ?, ?, ?, ?, ?);"
set cmdSTO = server.createobject("ADODB.Command")
cmdSTO.ActiveConnection = ConnStoricoUBI
cmdSTO.CommandText = SQLSTO
cmdSTO.CommandType = adCmdText
cmdSTO.CommandTimeout = 900

cmdSTO.Parameters.Append cmdSTO.CreateParameter("codScatola", adInteger, adParamInput, , codScatola )
cmdSTO.Parameters.Append cmdSTO.CreateParameter("scatola", adDouble, adParamInput, , scatola )
cmdSTO.Parameters.Append cmdSTO.CreateParameter("codArch", adInteger, adParamInput, , codArch )
cmdSTO.Parameters.Append cmdSTO.CreateParameter("codUbicazioneOLD", adInteger, adParamInput, , codUbicazioneOLD )
cmdSTO.Parameters.Append cmdSTO.CreateParameter("UbicazioneOLD", adChar, adParamInput, 30, UbicazioneOLD )                   '<----- error here
cmdSTO.Parameters.Append cmdSTO.CreateParameter("codUbicazioneNEW", adInteger, adParamInput, , codUbicazioneNEW )
' cmdSTO.Parameters.Append cmdSTO.CreateParameter("UbicazioneNEW", adVarChar, adParamInput, 30, UbicazioneNEW )              '<----- error here
cmdSTO.Parameters.Append cmdSTO.CreateParameter("data", adDBTimeStamp, adParamInput, , data )
cmdSTO.Parameters.Append cmdSTO.CreateParameter("codOperatore", adInteger, adParamInput, , codiceOperatore )

cmdSTO.Execute

set cmdSTO = nothing

On Error Resume Next
If Err.number = 0 and ConnStoricoUBI.Errors.Count = 0 Then
	ConnStoricoUBI.CommitTrans
Else
	ConnStoricoUBI.RollbackTrans
	'ConnStoricoUBI.close
	'set ConnStoricoUBI=nothing
	Call ChiudiConnDB("ConnStoricoUBI")

	esitoOP "Si e' verificato un errore, eseguito il rollback",""
End If
On Error GoTo 0

ConnStoricoUBI.close
set ConnStoricoUBI=nothing

if comment the line with char filed cmdSTO.Parameters.Append cmdSTO.CreateParameter("UbicazioneOLD", adChar, adParamInput, 30, UbicazioneOLD ) all work fine