我希望讨论更具有推测性而非决定性,因为这个问题本身就是推测性的。它本质上相当混乱。
我正在研究利用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 mapping)
....
在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#端)也会产生新的数据提供问题。
我的“问题”是这种行为是一个已知问题,还是从哪里开始寻找。在C#代码调用中,SQL Server Management Studio中有效的功能似乎很奇怪。
答案 0 :(得分:0)
也许您添加的参数类型不正确 你应该告诉我们sql中的字段类型,并在你的codw中添加参数