确定哪个参数导致异常的最简单方法是什么?

时间:2012-06-30 13:08:13

标签: c# sql-server

我有一个C#函数,它通过一个带有100多个参数的存储过程将数据保存到SQL-server。 (是的,我知道,这可能不是一个好的设计,但遗留的代码,不能在这里进入。); - )

出于某种原因,此代码现在出现此错误:

System.Data.SqlClient.SqlException was unhandled
  Message=Error converting data type int to tinyint.

现在,我首先看了参数和变量对,并没有明显的罪魁祸首。 (参数有许多数据类型,而不仅仅是tinyint)

那么确定流氓变量的最快方法是什么?有没有人知道一个好的方法来主动处理这个问题,让c#-side在运行时对参数验证变量 - 或以某种方式扩展错误消息以确切地告诉哪个参数失败?

现阶段不能选择实施ORM。


编辑:我已经开始编写一个函数CheckParameters,它将首先遍历参数并简单地列出参数和相应的值。我认为它可以通过不同数据类型的实际知识进行扩展,但是现在我只是想让它帮助找到坏变量。

结构如下:

        try
        {
            cmdStat.ExecuteNonQuery();
        }
        catch(SqlException)
        {
         CheckParameters(cmdStat.Parameters);   
         //re-throw 
        } 

        private void CheckParameters(SqlParameterCollection parameterCollection)
        {
          foreach (SqlParameter parameter in parameterCollection)
          {
            Trace.Write("{0}, {1}, {2}, {3}", parameter.ParameterName, parameter.DbType, parameter.SqlDbType, parameter.Value);
          }            
        }

1 个答案:

答案 0 :(得分:0)

我要做的是用存根替换proc。

然后我将二分之一的参数切成足够长以应对int。如果错误消失了,我只会将二进制文件切成一半,然后再次检查。如果错误没有消失那么我会做另一半。

我怀疑最多不到10次尝试才能找到它。