在我的实际项目中,im从一个文件制造商v14数据库读取数据。我得到的数据如下:
command.CommandText = "SELECT * FROM CAR";
//Create new SqlDataReader object and read data from the command.
using (OdbcDataReader reader = command.ExecuteReader())
{
/*
* Get and cast the ID
*/
int counter = 0;
while (reader.Read() && counter < numberOfOrders)
{
SalesOrder s = new SalesOrder();
s.abNR = reader["Auftrags Nr."].ToString();
s.artNr = reader["Artikel nr."].ToString();
s.quantity = reader["Menge"].ToString();
s.city_country_Coustomer = reader["Stadt"].ToString();
}
}
这段代码在我正在开发的计算机上运行得很好。
如果我将项目放到IIS中,则会发生以下错误:
算术运算导致溢出。
在这一行中:s.abNR = reader["Auftrags Nr."].ToString();
我已经在我的电脑和服务器上检查了dsn。两者似乎是一样的。
这种对像是这样产生的:
conn = new OdbcConnection("DSN=FILEMAKER1;Uid=Test;Pwd=tset");
conn.Open();
command = conn.CreateCommand();
我期待着你的回答!
编辑:
这是我的销售订单-班级:
public class SalesOrder
{
public string abNR { get; set; }
public string artNr { get; set; }
public string quantity { get; set; }
public string city_country_Coustomer { get; set; }
}
编辑2:
SalesOrder的示例数据:
Aufrags Nr. | Artikel nr. | Menge | Stadt |
------------+-------------+-------+---------+
168953 | 508800 | 2 | Berlin |
------------+-------------+-------+---------+
167996 | 508850 | 4 | München |
------------+-------------+-------+---------+
FF8957 | 509010 | 1 | Berlin |
编辑3:
OverflowException:模算术运算hat。System.Data.Odbc.OdbcDataReader.GetSqlType(Int32 i) +359 System.Data.Odbc.OdbcDataReader.GetValue(Int32 i) +57 System.Data.Odbc.DbCache.AccessIndex(Int32 i) +82 System.Data.Odbc.OdbcDataReader.GetValue(Int32 i) +38 ( Produktionscockpit.SQL.FilemakerController.getActualSalesOrders(Int32 c:\Dev\ProductionCockpit\Produktionscockpit\SQL\FilemakerController.cs:56 Produktionscockpit.Home.addSalesOrderTabelContent() in c:\Dev\ProductionCockpit\Produktionscockpit\default.aspx.cs:79 ) c:\Dev\ProductionCockpit\Produktionscockpit\default.aspx.cs:21中的Produktionscockpit.Home.Page_Load(对象发送方,EventArgs e) System.Web.UI.Control.LoadRecursive() +116 System.Web.UI.Page.ProcessRequestMain(布尔型includeStagesBeforeAsyncPoint,布尔型includeStagesAfterAsyncPoint) +2910
发布于 2016-05-23 10:10:53
我读了一些关于这个的文章,在32位和64位之间连接有一个问题。您的应用程序正在为x86编译吗?假设您使用的是32位ODBC数据源.
根据我在其他有同样问题的人身上看到的(我从未经历过这种情况),您可以通过将应用程序移动到32位(如果数据源是32位)或其他人卸载64位版本的filemaker并安装32位来修复它。
很可能这就是问题所在,但我不能给你一个合适的解决方案,因为我不了解你的环境。
发布于 2016-05-11 14:42:02
如果您正在接收一个ArithmeticOverflow
,听起来.NET在确定Aufttrags Nr.
列的类型时遇到了问题,并且猜错了。
如果这个列是一个Number
,那么它可以映射到各种各样的.NET数据类型。:
在将其输出为字符串之前,您可能会考虑通过Int64
方法显式地将其读取为Convert.ToInt64()
:
s.abNR = Convert.ToInt64(reader["Auftrags Nr."]).ToString();
或者,如果您期望该值是一个浮点数,则可以尝试通过Decimal
方法使用Convert.ToDecimal()
:
s.abNR = Convert.ToDecimal(reader["Auftrags Nr."]).ToString();
关于连接
由于您问题的标题显式地询问有关连接到FileMaker数据库的内容,所以您可以检查到确保连接字符串在这里是正确的。和下面的示例Filemaker连接字符串:
Driver=FileMaker Pro;AllAsText=0;ApplicationUsingThreads=1;FetchChunkSize=100;
FileOpenCache=0;IntlSort=0;MaxTextlength=255;ServerAddress=127.0.0.1;
TranslationOption=0;UseRemoteConnection=1;
虽然您的主要问题似乎与连接无关。
发布于 2016-05-20 11:08:35
您提供的堆栈跟踪System.Data.Odbc.OdbcDataReader.GetSqlType(Int32 i)
促使我得出结论,问题在于该文本类型确实被ODBC GetSqlType识别。行为上的差异可以通过ODBC驱动程序的不同版本或默认设置来解释。检查两个环境中的版本和设置。
作为一项工作,你可以尝试把你的字段转换成一些已知的类型。例如,
SELECT CAST(C.[Aufrags Nr.] as NVARCHAR(MAX)) as [Aufrags Nr.], .... FROM CAR C
根据查询的SQL server (或ODBC源)选择适当的列类型。
https://stackoverflow.com/questions/37165695
复制相似问题