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

And*_*yWD 5 .net c# t-sql sql-server

以下是使用以下代码的示例代码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));
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我的意思是我想了解在while循环中检索数据时是否存在相同的机制(如果是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();
Run Code Online (Sandbox Code Playgroud)

Xav*_*r J 6

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

如果您要将其推入使用数据集之类的东西,那么所有行都将同时位于 RAM 中。

  • @Andrey-WD [这里是来自 MSDN 的文档](https://msdn.microsoft.com/en-us/library/dd304523.aspx),其中详细介绍了如何通过网络发送数据。 (2认同)