Bug #24932 System.AccessViolationException OdbcException (0x80131937)
Submitted: 9 Dec 2006 10:42 Modified: 30 May 2013 6:52
Reporter: Gian Paolo Cipicchia Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / ODBC Severity:S1 (Critical)
Version:3.51 OS:Windows (XP Pro)
Assigned to: CPU Architecture:Any
Tags: ExecuteNonQuery, System.AccessViolationException, System.AccessViolationException

[9 Dec 2006 10:42] Gian Paolo Cipicchia
Description:
When i launch my local website and i call the UPDATE statement through ExecuteNonQuery in vb.net , the first time my pc do a beep and occurs a System.AccessViolationException with this stack trace:
System.Data.Common.UnsafeNativeMethods.SQLExecDirectW(OdbcStatementHandle StatementHandle, String StatementText, Int32 TextLength) +0
   System.Data.Odbc.OdbcStatementHandle.ExecuteDirect(String commandText) +34
   System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod) +2015
   System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader) +91
   System.Data.Odbc.OdbcCommand.ExecuteNonQuery() +92

and then it always occurs the following error:
OdbcException [(0x80131937)]
   System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) +35
   System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle) +131
   System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +98
   System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +27
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +47
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +105
   System.Data.Odbc.OdbcConnection.Open() +37
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +121
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +137
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +86
   locationDB.Get_locations_By_HANDLE(Int32 HANDLE) +222
   locationComponent.Get_locations_By_HANDLE(Int32 HANDLE, String sortExpression) +65

[TargetInvocationException: Eccezione generata dalla destinazione di una chiamata.]
   System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +0
   System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +72
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +358
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +29
   System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance) +482
   System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +2040
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +17
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +149
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +70
   System.Web.UI.WebControls.GridView.DataBind() +4
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
   System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +69
   System.Web.UI.Control.EnsureChildControls() +87
   System.Web.UI.Control.PreRenderRecursiveInternal() +41
   System.Web.UI.Control.PreRenderRecursiveInternal() +161
   System.Web.UI.Control.PreRenderRecursiveInternal() +161
   System.Web.UI.Control.PreRenderRecursiveInternal() +161
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1360

How to repeat:
here it is the piece of vb.net code that generates it:

Shared Function Updatelocation(ByVal fld_HANDLE As System.Int32, ByVal fld_SessionId As System.Int32, ByVal fld_Location_Id As System.String, ByVal fld_AdrsProv As System.Int32, ByVal fld_AdrsCom As System.Int32, ByVal fld_AdrsCAP As System.Int32, ByVal fld_AdrsPre As System.Int32, ByVal fld_AdrsName As System.String, ByVal fld_AdrsNr As System.String, ByVal fld_AdrsLoc As System.String, ByVal fld_PRG_ZTO As System.Int32, ByVal fld_Zona_Cens As System.String, ByVal fld_CreateDate As System.DateTime, ByVal fld_KS_Code As System.String) As Integer
  Dim connectionString As String = Helpers.GetInstance.ConnessioneDB
  Dim dbConnection As IDbConnection = New OdbcConnection(connectionString)

        Dim queryString As String = "UPDATE location SET SessionId = ?, Location_Id = ?, AdrsProv = ?, AdrsCom = ?, AdrsCAP = ?, AdrsPre = ?, AdrsName = ?, AdrsNr = ?, AdrsLoc = ?, PRG_ZTO = ?, Zona_Cens = ?, CreateDate = ?, KS_Code = ? WHERE HANDLE = ?"
        Dim dbCommand As IDbCommand = New OdbcCommand
  dbCommand.CommandText = queryString
  dbCommand.Connection = dbConnection

        Dim dbParam_SessionId As IDataParameter = New OdbcParameter
  dbParam_SessionId.Value = fld_SessionId
  dbParam_SessionId.DbType = DbType.[Int32]
  dbCommand.Parameters.Add(dbParam_SessionId)

  Dim dbParam_Location_Id As IDataParameter = New OdbcParameter
  dbParam_Location_Id.Value = fld_Location_Id
  dbParam_Location_Id.DbType = DbType.[String]
  dbCommand.Parameters.Add(dbParam_Location_Id)

  Dim dbParam_AdrsProv As IDataParameter = New OdbcParameter
  dbParam_AdrsProv.Value = fld_AdrsProv
  dbParam_AdrsProv.DbType = DbType.[Int32]
  dbCommand.Parameters.Add(dbParam_AdrsProv)

  Dim dbParam_AdrsCom As IDataParameter = New OdbcParameter
  dbParam_AdrsCom.Value = fld_AdrsCom
  dbParam_AdrsCom.DbType = DbType.[Int32]
  dbCommand.Parameters.Add(dbParam_AdrsCom)

  Dim dbParam_AdrsCAP As IDataParameter = New OdbcParameter
  dbParam_AdrsCAP.Value = fld_AdrsCAP
  dbParam_AdrsCAP.DbType = DbType.[Int32]
  dbCommand.Parameters.Add(dbParam_AdrsCAP)

  Dim dbParam_AdrsPre As IDataParameter = New OdbcParameter
  dbParam_AdrsPre.Value = fld_AdrsPre
  dbParam_AdrsPre.DbType = DbType.[Int32]
  dbCommand.Parameters.Add(dbParam_AdrsPre)

  Dim dbParam_AdrsName As IDataParameter = New OdbcParameter
  dbParam_AdrsName.Value = fld_AdrsName
  dbParam_AdrsName.DbType = DbType.[String]
  dbCommand.Parameters.Add(dbParam_AdrsName)

  Dim dbParam_AdrsNr As IDataParameter = New OdbcParameter
  dbParam_AdrsNr.Value = fld_AdrsNr
  dbParam_AdrsNr.DbType = DbType.[String]
  dbCommand.Parameters.Add(dbParam_AdrsNr)

  Dim dbParam_AdrsLoc As IDataParameter = New OdbcParameter
  dbParam_AdrsLoc.Value = fld_AdrsLoc
  dbParam_AdrsLoc.DbType = DbType.[String]
  dbCommand.Parameters.Add(dbParam_AdrsLoc)

  Dim dbParam_PRG_ZTO As IDataParameter = New OdbcParameter
  dbParam_PRG_ZTO.Value = fld_PRG_ZTO
  dbParam_PRG_ZTO.DbType = DbType.[Int32]
  dbCommand.Parameters.Add(dbParam_PRG_ZTO)

  Dim dbParam_Zona_Cens As IDataParameter = New OdbcParameter
  dbParam_Zona_Cens.Value = fld_Zona_Cens
  dbParam_Zona_Cens.DbType = DbType.[String]
  dbCommand.Parameters.Add(dbParam_Zona_Cens)

  Dim dbParam_CreateDate As IDataParameter = New OdbcParameter
  dbParam_CreateDate.Value = fld_CreateDate
  dbParam_CreateDate.DbType = DbType.[DateTime]
  dbCommand.Parameters.Add(dbParam_CreateDate)

  Dim dbParam_KS_Code As IDataParameter = New OdbcParameter
  dbParam_KS_Code.Value = fld_KS_Code
  dbParam_KS_Code.DbType = DbType.[String]
  dbCommand.Parameters.Add(dbParam_KS_Code)

        Dim dbParam_HANDLE As IDataParameter = New OdbcParameter
        dbParam_HANDLE.Value = fld_HANDLE
        dbParam_HANDLE.DbType = DbType.[Int32]
        dbCommand.Parameters.Add(dbParam_HANDLE)

 Dim rowsAffected As Integer = 0
 dbConnection.Open()
  Try
      rowsAffected = dbCommand.ExecuteNonQuery ' <- Error
  Finally
      dbConnection.Close()
  End Try

  Return rowsAffected
End Function
------------------------
where connectionString that i used is in my web.config:
 	<connectionStrings>
	<add name="wbamConnectionString" connectionString="DATABASE=****;DRIVER={MySQL ODBC 3.51 Driver};OPTION=0;PORT=3306;SERVER=localhost;UID=root;password=******" providerName="System.Data.Odbc"/>
	</connectionStrings>
the .net framework is v 2.0

Thanks for any suggestion,
Gian Paolo.
[10 Dec 2006 0:24] Gian Paolo Cipicchia
Well, I've resolved the problem.
Yes. Wrong SQL Syntax.
I've discovered something interesting.
For example:
when i've used the OdbcParameter called dbParam_SessionId
and so dbParam_SessionId.DbType = SqlDbType.Int
SqlDbType has a strange behaviour when a DateTime ( in MySQL DB ) field is converted to SqlDbType.DateTime. Yes ! It consider is as conversion from
DateTime to Decimal !!
So I've changed this piece of code:
dbParam_CreateDate.DbType = DbType.DateTime

So, here it is the code that works fine:
Shared Function Updatelocation(ByVal fld_HANDLE As System.Int32, ByVal fld_SessionId As System.Int32, ByVal fld_Location_Id As System.String, ByVal fld_AdrsProv As System.Int32, ByVal fld_AdrsCom As System.Int32, ByVal fld_AdrsCAP As System.Int32, ByVal fld_AdrsPre As System.Int32, ByVal fld_AdrsName As System.String, ByVal fld_AdrsNr As System.String, ByVal fld_AdrsLoc As System.String, ByVal fld_PRG_ZTO As System.Int32, ByVal fld_Zona_Cens As System.String, ByVal fld_CreateDate As System.DateTime, ByVal fld_KS_Code As System.String) As Integer
  Dim connectionString As String = Helpers.GetInstance.ConnessioneDB
  Dim dbConnection As IDbConnection = New OdbcConnection(connectionString)

  Dim queryString As String = "UPDATE location SET SessionId = ?, Location_Id = ?, AdrsProv = ?, AdrsCom = ?, AdrsCAP = ?, AdrsPre = ?, AdrsName = ?, AdrsNr = ?, AdrsLoc = ?, PRG_ZTO = ?, Zona_Cens = ?, CreateDate = ?, KS_Code = ? WHERE HANDLE = ?"
  Dim dbCommand As IDbCommand = New OdbcCommand
  dbCommand.CommandText = queryString
  dbCommand.Connection = dbConnection

  Dim dbParam_SessionId As IDataParameter = New OdbcParameter
  dbParam_SessionId.Value = fld_SessionId
  dbParam_SessionId.DbType = SqlDbType.Int
  dbCommand.Parameters.Add(dbParam_SessionId)

  Dim dbParam_Location_Id As IDataParameter = New OdbcParameter
  dbParam_Location_Id.Value = fld_Location_Id
  dbParam_Location_Id.DbType = SqlDbType.VarChar
  dbCommand.Parameters.Add(dbParam_Location_Id)

  Dim dbParam_AdrsProv As IDataParameter = New OdbcParameter
  dbParam_AdrsProv.Value = fld_AdrsProv
  dbParam_AdrsProv.DbType = SqlDbType.Int
  dbCommand.Parameters.Add(dbParam_AdrsProv)

  Dim dbParam_AdrsCom As IDataParameter = New OdbcParameter
  dbParam_AdrsCom.Value = fld_AdrsCom
  dbParam_AdrsCom.DbType = SqlDbType.Int
  dbCommand.Parameters.Add(dbParam_AdrsCom)

  Dim dbParam_AdrsCAP As IDataParameter = New OdbcParameter
  dbParam_AdrsCAP.Value = fld_AdrsCAP
  dbParam_AdrsCAP.DbType = SqlDbType.Int
  dbCommand.Parameters.Add(dbParam_AdrsCAP)

  Dim dbParam_AdrsPre As IDataParameter = New OdbcParameter
  dbParam_AdrsPre.Value = fld_AdrsPre
  dbParam_AdrsPre.DbType = SqlDbType.Int
  dbCommand.Parameters.Add(dbParam_AdrsPre)

  Dim dbParam_AdrsName As IDataParameter = New OdbcParameter
  dbParam_AdrsName.Value = fld_AdrsName
  dbParam_AdrsName.DbType = SqlDbType.VarChar
  dbCommand.Parameters.Add(dbParam_AdrsName)

  Dim dbParam_AdrsNr As IDataParameter = New OdbcParameter
  dbParam_AdrsNr.Value = fld_AdrsNr
  dbParam_AdrsNr.DbType = SqlDbType.VarChar
  dbCommand.Parameters.Add(dbParam_AdrsNr)

  Dim dbParam_AdrsLoc As IDataParameter = New OdbcParameter
  dbParam_AdrsLoc.Value = fld_AdrsLoc
  dbParam_AdrsLoc.DbType = SqlDbType.VarChar
  dbCommand.Parameters.Add(dbParam_AdrsLoc)

  Dim dbParam_PRG_ZTO As IDataParameter = New OdbcParameter
  dbParam_PRG_ZTO.Value = fld_PRG_ZTO
  dbParam_PRG_ZTO.DbType = SqlDbType.Int
  dbCommand.Parameters.Add(dbParam_PRG_ZTO)

  Dim dbParam_Zona_Cens As IDataParameter = New OdbcParameter
  dbParam_Zona_Cens.Value = fld_Zona_Cens
  dbParam_Zona_Cens.DbType = SqlDbType.VarChar
  dbCommand.Parameters.Add(dbParam_Zona_Cens)

  Dim dbParam_CreateDate As IDataParameter = New OdbcParameter
  dbParam_CreateDate.Value = fld_CreateDate
        dbParam_CreateDate.DbType = DbType.DateTime
  dbCommand.Parameters.Add(dbParam_CreateDate)

  Dim dbParam_KS_Code As IDataParameter = New OdbcParameter
  dbParam_KS_Code.Value = fld_KS_Code
  dbParam_KS_Code.DbType = SqlDbType.VarChar
  dbCommand.Parameters.Add(dbParam_KS_Code)

  Dim dbParam_HANDLE As IDataParameter = New OdbcParameter
  dbParam_HANDLE.Value = fld_HANDLE
  dbParam_HANDLE.DbType = SqlDbType.Int
  dbCommand.Parameters.Add(dbParam_HANDLE)

 Dim rowsAffected As Integer = 0
 dbConnection.Open()
  Try
      rowsAffected = dbCommand.ExecuteNonQuery
Catch e As OdbcException
'MsgBox(e.Message & vbCrLf & e.StackTrace.ToString())
  Finally
      dbConnection.Close()
  End Try

  Return rowsAffected
End Function

Best Regards,
Gian Paolo.
PS:  However, there is a problem,
ODBC Connector doesn't trow this specific syntax error.
[11 Dec 2006 8:15] Tonci Grgin
Hi Gian Paolo and thanks for your problem report. Can you please shorten your example code to just show the problem and post DDL and DML statements needed for the test?

As for conversion, from what I see in sources it is not a MyODBC problem as it supports all of conversions defined in http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcconverting_d...
[12 Jan 2007 0:00] Bugs System
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
[30 May 2013 6:52] Bogdan Degtyariov
I'm closing this bug because I can not continue without feedback from the reporter. If you have new info, please reopen the report.