SQL Server Management Studio成功时,System.Data.SqlClient失败

时间:2013-09-06 17:06:15

标签: c# sql sql-server-2008 stored-procedures

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

我正在研究利用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中有效的功能似乎很奇怪。

1 个答案:

答案 0 :(得分:0)

也许您添加的参数类型不正确 你应该告诉我们sql中的字段类型,并在你的codw中添加参数