• 在DNN中使用SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)始终无法获得返回值


    关于SqlHelper.ExecuteNonQuery的返回值问题

    SqlHelper.ExecuteNonQuerystring的两个构造函数在返回值方面有差异

    如果执行SqlHelper.ExecuteNonQuerystring(connectionString, string spName, params object[] parameterValues)则始终无法获得返回值

    如果执行SqlHelper.ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)则可以获得返回值

    Ref: http://blog.joycode.com/ghj/archive/2004/04/12/19015.aspx

    SqlHelper使用中需要注意的一点(带输出、返回参数的存储过程):

    SqlHelper中,在使用存储过程时候,如果你的存储过程参数中有输出、返回参数。有些函数是无法使用的。具体来说就是:

             SQLHelp 里面,如果传入的参数中有 params SqlParameter[] commandParameters 的那几个,是没问题的,有问题的是传入参数中有:params object[] parameterValues 的那几个:

    比如:
    public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)  这个没有提到的问题。

    这个
    public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
    有提到的问题。

    下面是有这些问题的函数列表:

    public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
    public static int ExecuteNonQuery(SqlConnection connection, string spName, params object[] parameterValues)
    public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object[] parameterValues)

    public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
    public static DataSet ExecuteDataset(SqlConnection connection, string spName, params object[] parameterValues)
    public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues)

    public static SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
    public static SqlDataReader ExecuteReader(SqlConnection connection, string spName, params object[] parameterValues)
    public static SqlDataReader ExecuteReader(SqlTransaction transaction, string spName, params object[] parameterValues)

    public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
    public static object ExecuteScalar(SqlConnection connection, string spName, params object[] parameterValues)
    public static object ExecuteScalar(SqlTransaction transaction, string spName, params object[] parameterValues)

    public static XmlReader ExecuteXmlReader(SqlConnection connection, string spName, params object[] parameterValues)
    public static XmlReader ExecuteXmlReader(SqlTransaction transaction, string spName, params object[] parameterValues)


    public static void FillDataset(string connectionString, string spName,
       DataSet dataSet, string[] tableNames,
       params object[] parameterValues)
    public static void FillDataset(SqlConnection connection, string spName,
       DataSet dataSet, string[] tableNames,
       params object[] parameterValues)
    public static void FillDataset(SqlTransaction transaction, string spName,
       DataSet dataSet, string[] tableNames,
       params object[] parameterValues)

    这里的类似函数的特征就是参数中,其中一个参数是:
    params object[] parameterValues

    如果你非要使用这些函数,你就会看到,你接收不到返回的存储过程输出、返回参数。

    原因:
          在这些函数的内部实现中,他把object[] parameterValues 转换为 SqlParameter[] commandParameters,而commandParameters 是个局部变量,在离开这个函数后,这些就无法再访问了。返回前,SqlHelper 并没有把commandParameters 的内容转赋给parameterValues 。所以之后你无法访问返回、输出参数的值。

  • 相关阅读:
    使用npoi做excel导出真心方便
    JAVA泛型(代码级解释)
    数据库战略高度解析(4) JDBCODBC
    [Python] 函数lambda(), filter(), map(), reduce()
    JEECG引领新的开发模式,让开发更加专注于业务!
    Parse 是什么
    Openflashchart及代理类设计介绍
    数据库战略高度解析(3) ODBC
    java 中paint .repaint.update
    svn利用钩子脚本功能实现代码同步到web目录
  • 原文地址:https://www.cnblogs.com/GDLMO/p/1665187.html
Copyright © 2020-2023  润新知