2010-10-26 31 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