DataTable.Load()与DataReader

时间:2013-02-13 05:49:13

标签: vb.net sql-server-2008 ado.net datatable sqldatareader

使用数据库中的存储过程获取大约200MB的大数据。以前使用DataTable.Load()方法在DataTable中填充此数据。但它导致性能问题,并且由于数据的大小,DataTable没有响应。

Using reader As DbDataReader = cmdHelper.ExecuteReader(CommandBehavior.CloseConnection)
    Using rstResult As New DataTable()
        rstResult.Locale = CultureInfo.InvariantCulture
        rstResult.Load(reader)
        Return rstResult
    End Using
End Using

但是现在为了提高直接使用DataReader开始的性能,但由于DatReader是连接架构,因此数据库连接将一直打开,直到BusinessLogic完成。

Dim cnHelper As New DbConnectionHelper(_strDBConnection)
Dim cmdHelper As DbCommandHelper = cnHelper.CreateCommandHelper(strSP)
cmdHelper.Command.CommandType = CommandType.StoredProcedure

Dim reader As DbDataReader = cmdHelper.ExecuteReader(CommandBehavior.CloseConnection)
Return reader

所以,我不想使用DatReader,因为在连接BusineesLogic之前,DB Connections将一直打开。

在这种情况下,有没有其他方法可以在不使用DataReader的情况下提高性能?

2 个答案:

答案 0 :(得分:0)

  

在这种情况下,还有其他方法可以改善性能   不使用DataReader?

由于DataReader是面向连接的,它将保持与数据库的连接打开,如果你无法负担不能加载DataTable / DataSet中的所有数据,那么我想其他选择是从块加载数据DataTable中的数据库并对其进行处理。否则我认为还有其他选择。

答案 1 :(得分:0)

  1. 使用存储过程获取数据
  2. 优化您的查询
  3. 如果您不想使用DataReader而不是部分加载数据(其中一种技术是分页)。