C# OdbcDataAdapter Fill抛出OverflowException算术运算导致溢出

C# OdbcDataAdapter Fill抛出OverflowException算术运算导致溢出,c#,ado.net,C#,Ado.net,我尝试使用OdbcDataAdapter从db2检索数据,这段代码在我的旧机器(Windows7 32位,VS2010)中运行良好 但是,当我在新机器(Windows 64位,VS2013)中使用相同的代码启动新项目时。执行adapter.Fill(ds) 我没有线索,因为相同的代码和sql查询在我的旧机器上工作。如有任何建议,将不胜感激 堆栈跟踪 at System.Data.Odbc.OdbcDataReader.GetSqlType(Int32 i) at System.Data.Od

我尝试使用OdbcDataAdapter从db2检索数据,这段代码在我的旧机器(Windows7 32位,VS2010)中运行良好

但是,当我在新机器(Windows 64位,VS2013)中使用相同的代码启动新项目时。执行
adapter.Fill(ds)

我没有线索,因为相同的代码和sql查询在我的旧机器上工作。如有任何建议,将不胜感激

堆栈跟踪

 at System.Data.Odbc.OdbcDataReader.GetSqlType(Int32 i)
 at System.Data.Odbc.OdbcDataReader.GetFieldType(Int32 i)
 at System.Data.ProviderBase.SchemaMapping.SetupSchemaWithoutKeyInfo(MissingMappingAction mappingAction, MissingSchemaAction schemaAction, Boolean gettingData, DataColumn parentChapterColumn, Object chapterValue)
 at System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
 at System.Data.Common.DataAdapter.FillMappingInternal(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
 at System.Data.Common.DataAdapter.FillMapping(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
 at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
 at System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
 at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
 at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
 at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)

我的项目也有同样的问题

在我的64位系统上,我会得到同样的错误,查询在SQL中运行良好,没有数据超出范围


到目前为止,我找到的唯一解决方案是将应用程序构建为32位应用程序(这为我解决了错误)

我最近遇到了相同或类似的问题。我比较肯定它与32位对64位的问题无关,尽管这是我所有搜索的解决方案

事实证明,至少在我的例子中,这并不是导致它的原因

我的odbc适配器读取的数据库(MYSQL)最近被修改为包含一个新的列,该列是用“TINYINT”类型设置的,我收集到的数据应该相当于一个布尔值。此数据类型是导致异常的原因

将数据库中该列的数据类型切换为“INT”而不是“TINYINT”后,异常被解除,站点工作正常


我想我会把这个回复作为另一个途径发布给那些由于类似变化而碰巧遇到这个问题的人。

最近我遇到了同样的问题。可能是您正在从64位运行32位ODBC驱动程序?它是在DB2/400上使用iSeries适配器吗?@GuidoLeenders是的,它是DB2/400您的工作环境WFM-使用类型化数据集,因此所有代码都是自动生成的。查询实际上是从someTable中选择*。数据集设计器的“预览数据”功能工作正常,但当运行或调试部署的应用程序时,OverflowException。。将构建更改为目标x86平台,错误消失了。猜测这与MySQL ODBC驱动程序“比特数”有关-VS是32位/设计器以32位运行,但应用程序以64位运行,除非强制使用x86
System.OverflowException
Arithmetic operation resulted in an overflow.
 at System.Data.Odbc.OdbcDataReader.GetSqlType(Int32 i)
 at System.Data.Odbc.OdbcDataReader.GetFieldType(Int32 i)
 at System.Data.ProviderBase.SchemaMapping.SetupSchemaWithoutKeyInfo(MissingMappingAction mappingAction, MissingSchemaAction schemaAction, Boolean gettingData, DataColumn parentChapterColumn, Object chapterValue)
 at System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
 at System.Data.Common.DataAdapter.FillMappingInternal(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
 at System.Data.Common.DataAdapter.FillMapping(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 schemaCount, DataColumn parentChapterColumn, Object parentChapterValue)
 at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
 at System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
 at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
 at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
 at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)