2014-10-31 59 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'時,異常被解除,網站正常工作。

我以爲我會張貼這個答覆作爲另一個途徑,因爲類似的變化碰巧遇到了這個問題的其他人。

相關問題