我尝试使用OdbcDataAdapter从db2检索数据,这段代码在我的旧机器上完美运行(Windows 7 32位,VS2010)
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)
答案 0 :(得分:1)
我的项目遇到了同样的问题
在我的64位系统上,我得到了同样的错误,查询在SQL中运行正常,没有数据超出范围。
到目前为止,我找到的唯一解决方案是将应用程序构建为32位应用程序(这为我解决了错误)
答案 1 :(得分:0)
我最近遇到了相同或类似的问题。我相对肯定它与32 VS 64位问题没有关系,尽管这是我所有搜索的解决方案。
事实证明,至少在我的实例中,并不是造成它的原因。
我的odbc适配器正在读取的数据库(MYSQL)最近被修改为包含一个使用' TINYINT'设置的新列。我收集的类型应该是一个布尔值的等价物。此数据类型是导致异常的原因。
将数据库中该列的数据类型切换为' INT'而不是' TINYINT'例外情况得到了缓解,网站正常运作。
我认为我会将此回复发布为其他任何由于类似更改而碰巧遇到此问题的途径。