使用SqlDataAdapter和SqlDataReader从数据库获取数据有什么区别?
我特别关注他们的优点和缺点,以及他们的速度和记忆表现.
谢谢
Joe*_*orn 189
另一方面,它:
代价是:
所以它真的取决于你正在做什么,但我倾向于更喜欢DataReader,直到我需要一些只受数据集支持的东西.SqlDataReader非常适合绑定到只读网格的常见数据访问情况.
有关详细信息,请参阅Microsoft官方文档.
jay*_*won 18
答案可能相当广泛.
从本质上讲,我通常会影响我决定使用哪个的主要区别在于,使用SQLDataReader,您将从数据库中"流式传输"数据.使用SQLDataAdapter,您将数据从数据库中提取到一个对象中,该对象本身可以进一步查询,以及执行CRUD操作.
显然,SQLDataReader的数据流速度要快得多,但一次只能处理一条记录.使用SQLDataAdapter,您可以从数据库中获得与查询匹配的行的完整集合,以使用/传递代码.
警告:如果您使用的是SQLDataReader,请始终始终确保编写正确的代码以关闭连接,因为您使用SQLDataReader保持连接打开.如果不这样做,或适当的错误处理,关闭的情况下,错误的处理结果将在连接跛子用连接泄漏您的应用程序.
请原谅我的VB,但这是使用SqlDataReader时应该具有的最少代码量:
Using cn As New SqlConnection("..."), _
cmd As New SqlCommand("...", cn)
cn.Open()
Using rdr As SqlDataReader = cmd.ExecuteReader()
While rdr.Read()
''# ...
End While
End Using
End Using
Run Code Online (Sandbox Code Playgroud)
等价的C#:
using (var cn = new SqlConnection("..."))
using (var cmd = new SqlCommand("..."))
{
cn.Open();
using(var rdr = cmd.ExecuteReader())
{
while(rdr.Read())
{
//...
}
}
}
Run Code Online (Sandbox Code Playgroud)
Wim*_*dse 13
SqlDataAdapter通常用于填充DataSet或DataTable,因此您可以在连接关闭(断开连接访问)后访问数据.
SqlDataReader是一个快速前向连接的游标,通常比填充DataSet/DataTable更快.
此外,使用SqlDataReader,您一次处理一条记录的数据,并且不在内存中保存任何数据.显然,使用DataTable或DataSet,您确实有内存分配开销.
如果您不需要将数据保存在内存中,那么只需要渲染内容,请转到SqlDataReader.如果要以断开连接的方式处理数据,请选择DataAdapter以填充DataSet或DataTable.
Ada*_*Dev 10
想要从数据库填充内存中的DataSet/DataTable时,请使用SqlDataAdapter.然后,您可以灵活地关闭/释放连接,在内存中传递数据表/集.然后,您可以使用数据适配器与InsertCommand/UpdateCommand一起操作数据并将其保留回数据库.
想要快速,低内存的数据访问时使用SqlDataReader,而无需灵活地例如在业务逻辑中传递数据.这对于大数据量的快速,低内存使用检索更为理想,因为它不会一次性将所有数据加载到内存中 - 使用SqlDataAdapter方法,DataSet/DataTable将填充所有数据,因此如果有很多行和列,需要大量的内存才能容纳.
| 归档时间: |
|
| 查看次数: |
114253 次 |
| 最近记录: |