存储过程输出参数空值

时间:2015-02-25 21:56:49

标签: ado.net

我尝试使用带有输出参数的SqlCommand来调用存储过程。呼叫成功完成,我得到了结果。

当我尝试从输出参数中访问值时偶然发现

时获得结果后出现问题
  1. 对象引用异常
  2. 带有参数名称的
  3. SqlParameter未包含在集合
  4. 转换自"" string to int failed。
  5. 请注意,这种情况不会一直发生,有时它会发生,有时它不会发生(偶尔发生,这使得很难找到原因)。

    这只发生在我们的产品环境中(开发和测试无法重新创建它)。

    EX:

    With _objCmd
         .CommandText = "MyStoredProcName"
         .CommandType = CommandType.StoredProcedure
         .Parameters.Add("@p_status", SqlDbType.Int).Direction = ParameterDirection.Output
         .Parameters.Add("@p_msg", SqlDbType.NVarChar, -1).Direction = ParameterDirection.Output
         .Parameters.Add("@p_searchusing", SqlDbType.NVarChar, -1).Value = BlankToNull(SearchDrugUsing)
    End With
    
    // my code execution happens here and returns results
    _retcode = CType(String.Concat(_objCmd.Parameters("@p_status").Value, ""), Integer)
    _retmsg = CType(String.Concat(_objCmd.Parameters("@p_msg").Value, ""), String)
    

    注意:使用SqlDataAdapter和fill方法映射存储过程结果,并尝试从SqlCommand访问输出参数。

    当我评论输出参数代码行时......它根本没有发生......

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

没关系,我能解决这个问题。它与访问变量(sqlcommand)的范围泄漏有关,因为它被声明为共享变量。因此,当越来越多的线程访问sqlcommand对象时,它会偶尔抛出异常。让它独一无二,修复一切。