2010-10-26 60 views
2

我目前正在将依赖于ADO的Vb6程序重新写入C#w/ADO.NET。我已经与这样的东西碰到几个地方原始代码:Ado.Net RecordSet成员等效吗?

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是使编辑器像SqlDataReader一样行事的[编辑]方式[/编辑]?如果是这样,那么我唯一真正的问题是我是否需要更多地制作Ado.Net缓存或者是否默认处理。

如果这是一个重复的问题,我真的很抱歉。我似乎无法在S.O.上找到这个。或者msdn。

回答

2

CacheSize属性控制记录集读入其内部缓冲区的记录数。在ADO.NET中没有等价的属性,因为它没有以相同的方式进行缓冲。所以,你可以放弃这一点。

难道我理解正确的是 adOpenForwardOnly和ADLOCKREADONLY 是SqlDataReader的默认?

是。那么,这不是默认值,而是数据读取器工作的唯一方式。对于使用RecordSet的任何其他方式,您可以使用其他类,如DataSetSqlDataAdapter

+0

更好。谢谢,您的解释更直接地回答了我的更多问题。 – Crisfole 2010-10-26 20:14:03

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中引入的。我宁愿不建议你用ADO.NET替换过时的VB6功能,当我有与LINQ(建立在ADO.NET和非常程序友好)的很好的经验 - read here,在许多地方,看到有什么区别。

+0

谢谢,这很有帮助。看起来我几乎可以假装代码不在那里,并以更多.Net-ey方式更高效。 – Crisfole 2010-10-26 20:10:39

+0

感谢您的建议。我曾经使用(并且爱过)一些Linq-to-Sql,但不幸的是它不适合我的特殊情况。我使用根据另一个数据库的内容(具有更稳定的模式)从任意表中选择的查询。我可以使用半个Linq-to-Sql/ADO.Net,但最好保持一致。 – Crisfole 2010-10-26 20:19:12