2

我目前正在将依赖 ADO 的 Vb6 程序重写为带有 ADO.NET 的 C#。我在原始代码中遇到了几个地方,比如:

Dim rs As New Recordset
rs.CacheSize = 500
Call rs.Open(sSql, cnMeta, adOpenForwardOnly, adLockReadOnly)

在 Ado.Net 中是否存在与 ADO.RecordSet.CacheSize 等效的(甚至需要等效的)?(大写那些?)我很高兴接受“ADO.NET”为您处理这些问题(实际上高兴接受这一点)。我的问题是在这次迁移之前我没有 ADO 经验,所以我不确定我是否会遗漏一些细节。

我是否正确理解 adOpenForwardOnly 和 adLockReadOnly 是使 RecordSet 表现得像 SqlDataReader 已经 [/EDIT] 的 [EDIT] 方式?如果是这样,那么我唯一真正的问题是我是否需要让 Ado.Net 缓存更多,或者是否默认处理。

如果这是一个重复的问题,我真的很抱歉。不过,我似乎在 SO 或 msdn 上找不到这个。

4

2 回答 2

2

CacheSize属性控制记录集读入其内部缓冲区的记录数。ADO.NET 中没有等效的属性,因为它没有以相同的方式缓冲。所以,你可以把它排除在外。

我是否正确理解 adOpenForwardOnly 和 adLockReadOnly 是 SqlDataReader 的默认值?

是的。好吧,这不是默认设置,而是数据读取器工作的唯一方式。对于使用 a 的任何其他方式RecordSet,您将使用其他类,例如DataSetSqlDataAdapter

于 2010-10-26T20:11:49.433 回答
1

这篇文章可能会有所帮助:

http://www.devnewsgroups.net/adonet/t55360-paging-recordsets-ado-net.aspx

也是 MSDN CacheSize 主题的快速链接:

http://msdn.microsoft.com/en-us/library/ms675871%28VS.85%29.aspx

然而,我的建议是熟悉 Linq-to-SQL,它是在 .NET 3.5 中引入的。当我对 LINQ(基于 ADO.NET 构建并且对程序员非常友好)有丰富的经验时,我宁愿不建议您用 ADO.NET 替换过时的 VB6 功能 -请在许多地方阅读这里看看有什么区别。

于 2010-10-26T20:03:22.317 回答