【问题标题】:While retriving data for mutiple AJAX call with 2 different methods using DataReader在使用 DataReader 使用 2 种不同方法检索多个 AJAX 调用的数据时
【发布时间】:2016-04-05 07:11:49
【问题描述】:

同时使用 DataReader 通过 2 种不同的方法检索多个 AJAX 调用的数据。

方法一:

using (SqlDataReader reader = clientDb.ExecuteSPReader("SP1", 
                                        CommandBehavior.CloseConnection,
                                        parameters))
{
    if (reader.HasRows)
    {
        while (reader.Read())
        {
        }
        reader.Close();
    }
}

方法二:

using (SqlDataReader reader = clientDb.ExecuteSPReader("SP2", 
                                        CommandBehavior.CloseConnection,
                                        parameters))
{
    if (reader.HasRows)
    {
        while (reader.Read())
        {
        }
        reader.Close();
    }
}

这两种方法都在单个数据库上执行。它是否应该暗示我不会关闭阅读器,因为它将被 GC 关闭?我正在使用“使用”语句执行阅读器。

就我而言,问题在于两种方法都使用相同的数据库。一种方法

reader.close()

关闭另一个方法连接并跳转到异常。所以,想知道实现这种 AJAX 请求方法的最佳方式是什么。

我还在以下网址中读到,不应关闭或处置托管对象。

https://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx

【问题讨论】:

    标签: asp.net asp.net-ajax


    【解决方案1】:

    首先,通过使用using 语句,当执行离开作用域时,SqlDataReader 将被释放。和手动调用reader.Dispose()一样。

    由于读者不依赖外部或非托管代码,例如您的SqlConnection,因此您不必处理它,但您应该始终使用close it。处置将由 GC 管理。

    进一步说,您应该真正将您的SqlConnection 包装在using statement 中,因为它使用数据库的连接池。如果在数据库未使用时留下大量打开的连接,这对性能也不是很好。

    我假设这些数据库调用是在对服务器的两次不同调用中进行的,而不是在同一方法中按顺序依次进行。

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 2017-03-23
      • 2015-01-03
      相关资源
      最近更新 更多