.NET SqlDataReader对象是否使用数据库游标,或者整个结果集是否已加载到RAM中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET SqlDataReader对象是否使用数据库游标,或者整个结果集是否已加载到RAM中?相关的知识,希望对你有一定的参考价值。

以下是使用SqlDataReader的示例代码:

// Working with SQLServer and C#
// Retrieve all rows
cmd.CommandText = "SELECT some_field FROM data";

using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        Console.WriteLine(reader.GetString(0));
    }
}

编辑:

我的意思是我想要了解在使用SQLite时,在while循环(在SqlDataReader的情况下)从数据库中检索数据时是否存在相同的机制。

// working with SQLite and Java
if (cursor.moveToFirst()) {
   do {
      String data = cursor.getString(cursor.getColumnIndex("data"));
      // do what ever you want here
   } while(cursor.moveToNext());
}
cursor.close();
答案

不,除非您的命令正在调用使用游标的存储过程,否则服务器端没有游标。当您使用SqlDataReader时,服务器返回一个普通的SQL结果集,一次一行。显然,数据必须在你可以读取它之前的某个地方,而那个地方将是SQL Server和驱动程序管理的缓冲区。

如果您要使用像Dataset这样的东西,那么所有的行都会立即在RAM中。

另一答案

当您使用返回许多dbsets的游标时,您可以获得许多结果集:

while (oSqlDataReader.HasRows)
{
  while (oSqlDataReader.Read())
  {
    // oSqlDataReader.Getdata...
  }
  oSqlDataReader.NextResult();
}

以上是关于.NET SqlDataReader对象是否使用数据库游标,或者整个结果集是否已加载到RAM中?的主要内容,如果未能解决你的问题,请参考以下文章

将 SqlDataReader 的结果映射到对象的最快方法

是否可以仅使用 SqlConnection SqlCommand 和 SqlDataReader 来执行数据访问层

vb.net访问sql server数据库(SqlDataReader和DataSet两种方式)

如果值为空,如何将值返回给 sqldatareader?

.NET 中有啥比 SqlDataReader 更快的吗?

ADO.net五大对象