2014-10-31 58 views
0

我尝试检索使用OdbcDataAdapter的从DB2数据和此代码的工作完全在我的老机器(Windows 7的32位,VS2010)OdbcDataAdapter的填写抛出OverflowException异常算术运算导致溢出

public DataSet GetDataSet(string sql, string connstr) 
{ 
    using (OdbcConnection cn = new OdbcConnection(connstr)) 
    { 
     using (OdbcCommand cmd = new OdbcCommand(sql, cn)) 
     { 
      OdbcDataAdapter adapter = new OdbcDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      adapter.Fill(ds); 
      return ds; 
     } 
    } 
} 

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

System.OverflowException 
Arithmetic operation resulted in an overflow. 

时,我不知道,因为相同的代码和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) 
+1

最近我遇到了同样的问题。可能是因为你正在从64位运行32位ODBC驱动程序?它是否在使用iSeries适配器的DB2/400上? – 2015-01-04 07:58:17

+0

@GuidoLeenders是的,它是DB2/400 – walterhuang 2015-06-24 06:02:46

回答

1

在和我的项目

同样的问题,在我的64位系统,我得到了同样的错误,在查询的SQL运行得很好,没有数据出界。

只有解决办法,我发现到目前为止是构建应用程序作为32位应用程序(这解决了我的错误)

+0

解决方法WFM - 使用类型化的数据集,因此所有代码都是自动生成的。查询实际上是SELECT * FROM someTable。 DataSet设计器的“预览数据”功能工作正常,但是当部署应用程序运行或调试时,OverflowException。将构建更改为目标x86平台并且错误消失。猜测这是与MySQL的ODBC驱动程序“位” - VS是32位/设计器运行在32位,但应用程序运行在64,除非强制x86 – 2015-12-23 08:10:36

0

我最近遇到了相同或类似的问题。尽管这是我所有搜索过程中提出的解决方案,但我相对看好它与32 VS 64位问题无关。

事实证明,至少在我的情况下,这并不是造成这种情况的原因。

我的odbc适配器正在读取的数据库(MYSQL)最近被修改为包含一个使用'TINYINT'类型设置的新列,我收集的这个列应该是布尔值的等价物。此数据类型是导致异常的原因。

将数据库中该列的数据类型切换为'INT'而不是'TINYINT'时,异常被解除,网站正常工作。

我以为我会张贴这个答复作为另一个途径,因为类似的变化碰巧遇到了这个问题的其他人。

相关问题