2010-08-05 4 views
0

ASP.net C# 3.5 Framework, travaillant actuellement dans Visual Studio 2008.Comment créer une classe d'accès aux données générique?

Ce que je veux est une classe générique d'accès aux données. J'ai vu plusieurs d'entre eux mais ce que je veux est de voir celui que je passe la chaîne de connexion et l'instruction SQL et il retournera une liste d'objets ou quand seulement un article un objet ou quand aucune réponse a besoin d'un booléen pour me le faire savoir si ça a réussi?

J'espère que cela a du sens si vous ne le faites pas savoir et je vais vous expliquer plus.

+0

avez-vous essayé le bloc d'application de données (bibliothèque d'entreprise)? Il a peu d'initialisations et par la suite il fonctionne à peu près comme vous l'avez spécifié. –

+0

http://www.remondo.net/repository-pattern-example-csharp/ – JenonD

Répondre

1

Vérifiez ma réponse à cette question:

Fastest method for SQL Server inserts, updates, selects

Ce n'est pas une classe complète, mais elle expose les bases d'une bonne implémentation générique qui fonctionnera avec LINQ-à-objets.

+0

C'est le plus proche de ce que je voulais. Je vais essayer cela et voir si ça va marcher pour moi. –

3

Vous n'avez pas à rouler les vôtres. Découvrez Microsoft.Data.dll. Il est quelque part entre le code ADO.NET bas niveau (en utilisant SqlConnection, SqlCommand, etc.) et un niveau supérieur cadre ORM comme LINQ to SQL ou NHibernate:

Introduction to Microsoft.Data.dll

Ensuite, votre accès devient aussi facile que:

var db = Database.OpenConnectionString(connString); 
for(var user in db.Query("select * from users")) 
{ 
    var username = user.Username; 
    // Do other stuff here 
} 
+0

J'aime la magie noire de C# ... aimerait savoir comment cela fonctionne dans les coulisses. – Nix

+0

Vous devez installer MDAC pour que cela fonctionne? Quel dll/namespace avez-vous à référencer (je teste cela maintenant). – Nix

+0

@Nix - Si je me souviens bien, Microsoft.Data.dll fait partie de WebMatrix: http://www.asp.net/webmatrix –

3

Avez-vous regardé LINQ-to-SQL (je ne recommande pas ce bien, il ne va pas obtenir beaucoup d'attention de Microsoft à l'avenir), LINQ-to-Entities (c'est ce que Microsoft consacre des ressources dans ce domaine pour le prévisible avenir), NHibernate, ou tout autre ORM(-ish) libraries for .NET? N'importe lequel d'entre eux aura des mécanismes pour vous permettre de créer vos requêtes (d'une manière plus sûre, je pourrais ajouter) et récupérer les résultats sous forme d'objet (ou obtenir des résultats de procédures si vous avez affaire à des résultats scalaires).

Maintenant, il ne vous permet pas de passer la chaîne de requête, mais si vous générez dynamiquement cela, alors le plus souvent, c'est une très mauvaise chose, comme la plupart des instructions SQL dynamiques composées, si vous n'utilisez pas de paramètres (que vous n'êtes pas en train d'indiquer), vous êtes soumis à des attaques SQL injection. Lorsque vous utilisez l'une des bibliothèques ci-dessus, vous pouvez composer votre requête, et les paramètres seront analysés et le SQL dynamique sous les couvertures sera généré en toute sécurité, pas soumis à des attaques par injection SQL.

+0

Donc, si Microsoft se déplace de LINQ-to-SQL à LINQ-Entities combien plus dire le mouvement de cela? Devrais-je même m'inquiéter à ce sujet? Je devrais peut-être obtenir NHibernate et l'essayer. –

+1

@Nathan Stanford: Je me concentrerais sur LINQ-to-Entities ou NHibernate. Je préfère la pile LINQ-Entities, car il y a une meilleure intégration avec d'autres technologies MS (RIA, par exemple), mais LINQ-to-SQL serait mon dernier recours. – casperOne

Questions connexes