2010-10-26 33 views
2

Je suis actuellement en train de réécrire un programme Vb6 s'appuyant sur ADO dans C# w/ADO.NET. J'ai couru en plusieurs endroits dans le code original avec des trucs comme ça:Ado.Net RecordSet membre équivalent?

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

Y at-il un équivalent (ou même besoin d'un équivalent) à ADO.RecordSet.CacheSize en Ado.Net? (Capitalisation sur ceux?) Je suis heureux d'accepter "ADO.NET" prend soin de cela pour vous (très heureux d'accepter cela, en fait). Mon problème est que je n'avais aucune expérience ADO avant cette migration, donc je ne suis pas sûr s'il y a des subtilités que je manquerais. Est-ce que je comprends correctement que adOpenForwardOnly et adLockReadOnly sont le moyen [EDIT] de faire en sorte que RecordSet se comporte comme SqlDataReader le fait déjà [/ EDIT]? Si c'est le cas, alors ma seule vraie question est de savoir si je dois ou non rendre le cache Ado.Net plus important ou si cela est géré par défaut.

Je suis vraiment désolé si c'est une question répétée. Je n'arrive pas à trouver ça sur S.O. ou msdn si.

Répondre

2

La propriété CacheSize contrôle le nombre d'enregistrements que le jeu d'enregistrements lit dans son tampon interne. Il n'y a pas de propriété équivalente dans ADO.NET, car elle n'est pas mise en mémoire tampon de la même manière. Donc, vous pouvez simplement laisser tomber ça.

Est-ce que je comprends bien que adOpenForwardOnly et adLockReadOnly sont les valeurs par défaut pour SqlDataReader?

Oui. Eh bien, ce n'est pas la valeur par défaut, mais plutôt la seule façon que le lecteur de données fonctionne. Pour toute autre manière qu'un RecordSet est utilisé, vous utiliserez d'autres classes, telles que DataSet et SqlDataAdapter.

+0

Encore mieux. Merci, votre explication répond plus à mes questions, plus directement. – Crisfole

1

Ce poste peut aider:

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

également un lien rapide au sujet MSDN CacheSize:

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

Ma recommandation, cependant, serait de vous familiariser avec Linq- to-SQL, qui a été introduit dans .NET 3.5. Je préfère ne pas vous recommander de remplacer la fonctionnalité VB6 obsolète avec ADO.NET, quand j'ai eu de grandes expériences avec LINQ (qui est construit sur ADO.NET et est très programmeur-friendly) - read here, parmi beaucoup d'endroits, à voir quelles sont les différences.

+0

Merci, c'est utile. On dirait que je peux à peu près prétendre que le code n'était pas là et le rendre plus efficace dans plus de façons .Net-ey. – Crisfole

+0

Merci pour le conseil. J'ai utilisé (et aimé) certains Linq-to-Sql, mais malheureusement, il ne correspond pas à mon cas particulier. J'utilise des requêtes qui sélectionnent des tables arbitraires en fonction du contenu d'une autre base de données (avec un schéma plus stable). Je pourrais utiliser moitié-moitié Linq-to-Sql/ADO.Net, mais il semblait préférable d'être cohérent. – Crisfole