.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));
    }
}

编辑:

我的意思是我想了解在while-loop中从数据库中检索数据时是否有相同的机制(在SqlDataReader的情况下(与使用SQLite时一样。

// 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时,服务器正在返回一个普通的Vanilla SQL结果集,一次是一行。显然,数据必须在您阅读之前就在某个地方,并且该位置将是SQL Server和驱动程序管理的缓冲区。

如果要将其推向使用数据集之类的东西,则然后,所有行都将立即在RAM中。

使用光标返回许多DBSET时,您可以获得许多结果集:

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

最新更新