| 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: | |
| Category: | Connector / ODBC | Severity: | S1 (Critical) |
| Version: | 3.51 | OS: | Windows (XP Pro) |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | ExecuteNonQuery, System.AccessViolationException, System.AccessViolationException | ||
[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.

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.