1

我希望讨论更具推测性而不是确定性,因为这个问题本身就是推测性的。它本质上是相当混乱的。

我正在查看Microsoft.Practices.EnterpriseLibrary用于 SQL Server 数据访问的 .NET 4.0 C# 代码。

该代码调用一个在 SQL Server Management Studio 中运行良好的存储过程并返回结果。问题是,当从 C# 端调用该过程时,会引发异常。

违规代码如下:

Database _db = DatabaseFactory.CreateDatabase(instance_name);
string _sql = "[dbo].[usp_stored_procedure]";
DbCommand _cmd = _db.GetStoredProcCommand(_sql);
/* _db.AddInParameter calls to supply parameters */
DataSet _ds = _db.ExecuteDataSet(_cmd);

最后一行抛出一个异常,它说:

将 int 转换为数据类型 numeric 的算术溢出错误。
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection)
....
在 System.Data.SqlClient.SqlDataReader.Read()
....
在 System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping 映射)
....
在 Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteDataSet(DbCommand 命令)

....
在 DataAccess.call_stored_procedure(字符串 instance_name,int?_client_id,int?_client_group_id,int?_event_type_id,DateTime _start_date,DateTime _end_date,int?_employee_type_id,int?_survey_id,int?_ro_date)

我省略了(我认为的)不必要的堆栈跟踪,以及引发异常的函数。参数按该顺序提供,并且类型精确匹配。

存储过程中有 的用法Decimal(18, 10),并且存储过程与以前的一组数据一起使用(在 C# 端也是如此)它对新的数据供应产生了问题。

我的“问题”是这种行为是否是一个已知问题,或者从哪里开始寻找。在 SQL Server Management Studio 中起作用的东西在 C# 代码调用中不起作用,这似乎很奇怪。

4

1 回答 1

0

也许你添加了错误类型的参数你应该告诉我们关于 sql 中字段的类型并在你的 codw 中添加参数

于 2014-06-17T10:42:05.547 回答