在发布时ExecuteNonQuery()发生整数溢出,而不是调试(c#)
本文关键字:调试 整数 布时 ExecuteNonQuery 溢出 | 更新日期: 2023-09-27 18:02:18
每当我在调试中运行程序时,它都能完美地工作,然而,一旦我将它转换为Release并运行它,我就会从ExecuteNonQuery()中获得溢出。查询很短,这是一个简单的更新,如果我在DBMS中手动运行它或在调试模式下运行它,但由于某种原因,它在发布模式下返回溢出(注意:我甚至不在任何地方存储值,所以溢出不是由变量引起的,而是由函数本身)
提前感谢!
代码:对不起,我完全忘了!
App.Comando.CommandText = "UPDATE META3.Paramet SET ConPCO = "
+ numpcoGen.ToString().Replace(",",".")
+ " WHERE CodEmp = 1 AND Ano = " + DateTime.Now.Year.ToString();
App.Comando.ExecuteNonQuery();
堆栈跟踪:(不幸的是,ODBC驱动程序是西班牙语的,尽管IDE和其他一切都是英语的…)
Exception抛出异常:'System. 'System. data .dll中的"OverflowException"("La operación artimsamictica ha provocado un desbordamiento.")。OverflowException
请注意,我知道串联是不好的做法,但它不需要用户输入,这是经理想要的方式。
ExecuteNonQuery()影响一行(手动)-而在发布中,如果我附加一个调试器,它返回-1(仍然不应该是一个问题,imo)和字段在DB中修改。
如果我将ExecuteNonQuery()作为监视并重新计算它,它会抛出相同的异常。
我认为这个问题是由完全不同的东西引起的:并发性。App.Commando
似乎是静态的——不同的线程可能会覆盖它的内容。查看来自Microsoft的文档https://msdn.microsoft.com/en-us/library/a0sdddxt(v=vs.100).aspx:
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. For all other types of statements, the return value is -1.
由于您报告的返回值为-1
,因此它不可能是您向我们展示的UPDATE查询的返回值。因此,我建议多线程问题作为原因。