`

使用SqlHelper时“阅读器关闭时read的尝试无效”的解决方法

    博客分类:
  • C#
 
阅读更多

 

原SqlHelper类中ExecuteReader方法体为:

	public static SqlDataReader ExecuteReader(string sqlString, params SqlParameter[] sqlParams)
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        PrepareCommand(conn, cmd, sqlString, sqlParams);
                        SqlDataReader rdr = cmd.ExecuteReader();
                        cmd.Parameters.Clear();
                        return rdr;
                    }
                    catch { return null; }
                    finally
                    {
                        conn.Close();
                        conn.Dispose();
                        cmd.Dispose();
                    }
                }
            }
        }
	
出现该错误的原因是using的问题,而且finally会在自动关闭conn,而不管reader是否传递。
将ExecuteReader方法体修改为:

        public static SqlDataReader ExecuteReader(string sqlString, params SqlParameter[] sqlParams)
        {
            SqlConnection conn = new SqlConnection(ConnString);
            SqlCommand cmd = new SqlCommand();
            try
            {
                PrepareCommand(conn, cmd, sqlString, sqlParams);
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;
            }
            catch { return null; }
        }

 

 

分享到:
评论

相关推荐

    阅读器关闭时 Read 的尝试无效。

    其中一个比较典型的错误就是“阅读器关闭时 Read 的尝试无效”。这个错误通常发生在尝试从一个已经关闭的`SqlDataReader`读取数据时。 #### 错误分析 根据提供的代码片段,可以看到一个用于获取`SqlDataReader`的...

    Visual C++源代码 114 如何使用SqlHelper查询数据库记录

    Visual C++源代码 114 如何使用SqlHelper查询数据库记录Visual C++源代码 114 如何使用SqlHelper查询数据库记录Visual C++源代码 114 如何使用SqlHelper查询数据库记录Visual C++源代码 114 如何使用SqlHelper查询...

    使用SqlHelper(2.0)

    在使用SqlHelper执行SQL操作时,应妥善处理可能出现的SqlException和其他异常,确保程序的健壮性。 9. **最佳实践** - 总是关闭数据库连接:即使SqlHelper内部会自动关闭和释放资源,但为了保险起见,最好在完成...

    Visual C++源代码 115 如何使用SqlHelper增加数据库记录

    Visual C++源代码 115 如何使用SqlHelper增加数据库记录Visual C++源代码 115 如何使用SqlHelper增加数据库记录Visual C++源代码 115 如何使用SqlHelper增加数据库记录Visual C++源代码 115 如何使用SqlHelper增加...

    Visual C++源代码 116 如何使用SqlHelper获取聚合函数值

    Visual C++源代码 116 如何使用SqlHelper获取聚合函数值Visual C++源代码 116 如何使用SqlHelper获取聚合函数值Visual C++源代码 116 如何使用SqlHelper获取聚合函数值Visual C++源代码 116 如何使用SqlHelper获取...

    GridView中使用SqlHelper分页

    本话题主要关注如何在GridView中结合SqlHelper实现分页功能,这对于处理大量数据时提高用户体验至关重要。 SqlHelper是.NET Framework中的一个实用工具类,它简化了SQL Server数据库的访问。使用SqlHelper,我们...

    使用SQLHelper类调用带输出、返回参数的存储过程

    使用`SQLHelper`类调用存储过程时,需要正确处理这些参数,尤其是输出参数和返回值。 #### 2.1 使用SqlParameter数组传递参数 `SQLHelper`类提供了多个重载方法来执行存储过程,其中一个关键方法是接受`Sql...

    SQLHelper类的使用

    SQLHelper类提供了一系列静态方法,这些方法主要负责执行SQL语句并处理结果集。通过使用SQLHelper,开发者可以避免重复编写连接数据库、创建SqlCommand对象以及处理异常的代码,从而极大地提高了开发效率和代码的...

    SqlHelper源码及使用实例

    下面我们将详细讨论SqlHelper的核心功能及其使用方法。 1. **SqlHelper的基本结构** SqlHelper类通常包含以下方法: - ExecuteNonQuery:执行非查询SQL语句,如INSERT、UPDATE、DELETE。 - ExecuteReader:执行...

    使用SqlHelper增加数据库记录 编程小实例,C++.net源代码编写

    通过阅读和分析这段代码,你可以学习到如何在C++.NET中构造和使用类似SqlHelper的类,以及如何进行数据库操作。 需要注意的是,C++.NET并不是微软官方支持的.NET编程语言,而是由第三方开发者提供的扩展。因此,你...

    使用SqlHelper获取聚合函数值 编程小实例

    3. **使用SqlHelper的ExecuteScalar方法**:此方法用于执行SQL查询并返回单个值。对于聚合函数,我们通常期望得到一个单一的结果。例如,获取某个列的总和可以这样写: ```cpp String^ query = "SELECT SUM(column...

    sqlhelper

    - 在使用`SQLHelper`类时,需要注意正确处理数据库连接的打开和关闭。 - 参数化查询可以有效防止SQL注入攻击。 - 当处理大量数据时,应考虑性能优化问题。 通过以上介绍,我们可以看到`SQLHelper`类在.NET应用程序...

    使用SqlHelper查询数据库记录 编程小实例,C++.net源代码编写

    在.NET框架中,SqlHelper是一个常用的辅助类库,它简化了与SQL Server数据库的交互,尤其是在执行SQL命令时。这个编程小实例展示了如何利用C++.NET来利用SqlHelper查询数据库记录。下面,我们将深入探讨这一主题,...

    SqlHelper.zip

    6. **连接管理**:SqlHelper内部管理数据库连接,使用连接池进行优化,执行完毕后自动关闭连接,降低了资源消耗。 7. **错误处理**:当数据库操作出现异常时,SqlHelper可以捕获并抛出异常,帮助开发者定位问题。 ...

    c# 和MySql 使用的 SqlHelper

    c# 和MySql 使用的 SqlHelper

    含有事务操作的sqlhelper类C#

    3. **使用SQLHelper执行命令**:在事务中,你可以使用SQLHelper的静态方法如`ExecuteNonQuery`、`ExecuteScalar`或`ExecuteReader`来执行SQL命令。这些方法接受一个SqlTransaction参数,将命令绑定到当前事务中。 4...

    最新强大而简便的SqlHelper类

    功能描述: 可以对OLEDB和SQL数据库进行操作 5种方式执行SQL命令:无返回,返回首个结果,返回数据读取器,返回数据集,返回数据表 ...7,注意,使用返回数据读取器系列功能时,需要在调用前后手动连接和关闭数据库.

    SqlHelper.NET

    - 错误处理:在使用SqlHelper的方法时,应该捕获可能出现的SqlException和其他异常,以便进行适当的错误处理和日志记录。 - 事务支持:SqlHelper也提供了开始、提交和回滚事务的功能,这对于执行一系列需要原子性的...

    数据连接类SqlHelper

    SqlHelper 是一个在IT行业中广泛使用的工具类,主要用于简化数据库操作,尤其是对于.NET框架下的C#开发者来说。这个类库通常包含一系列静态方法,提供了一种便捷的方式来执行SQL语句,进行数据的增、删、改、查...

    C# SqlHelper类 (微软官方)

    下面我们将深入探讨SqlHelper类的主要功能和使用方法。 1. **连接字符串**: 在使用SqlHelper之前,需要一个有效的连接字符串,该字符串定义了应用程序与数据库的连接参数,如服务器名、数据库名、用户名和密码等...

Global site tag (gtag.js) - Google Analytics