2010-10-14 4 views
2

travaille actuellement sur une application Web ASP.NET et je commence à réaliser que je suis écrire le même code de la plaque de la chaudière encore et encore ..Méthodes SQL ASP.NET 4?

-à-dire

 SqlDataReader myReader = null; 
     SqlCommand SQLcmd = new SqlCommand(); 
     SqlConnection SQLConn = new SqlConnection(); 
     String SQLStatement = "Select this 'nd That"; 
     SQLConn.ConnectionString = SQLConnectionString; 
     SQLConn.Open(); 
     SQLcmd.Connection = SQLConn; 
     SQLcmd.CommandText = SQLStatement; 
     myReader = SQLcmd.ExecuteReader(); 
     while (myReader.Read()) 
     { 
      //Do some awesome 
     } 
     SQLConn.Close(); 
    } 

Comment le monde .NET joue avec SQL maintenant?

Comment puis-je ne pas passer la moitié de la journée à copier et coller ce code?

Est-ce que tout le monde utilise Linq to SQL? et si oui, veuillez me diriger vers un tutoriel!

Merci beaucoup!

Daniel

+0

Oui, LINQ2SQL ou Entity Framework. Premier coup sur Google devrait vous aider à démarrer. –

+0

Ce code peut facilement être DRYd, vous n'avez donc qu'à l'écrire une seule fois. Mais comme d'autres l'ont dit, le choix populaire de nos jours est EF. – bzlm

+0

Avez-vous déjà résolu ce problème avec succès? Avez-vous encore besoin d'aide pour cela? – jcolebrand

Répondre

2

L'humeur générale ces jours-ci est d'utiliser une sorte de ORM.

choix populaires sont:

Linq2Sql est en effet un ORM, mais il n'est plus activement développé au sein de Microsoft.

+2

Ce n'est pas vrai que L2S n'est plus développé. En fait, L2S a été mis à jour pour VS 2010. Il s'agit simplement d'un mode de maintenance et continuera à être pris en charge. –

0

Il n'y a pas de "un" chemin. Certaines personnes utilisent Linq pour sql, d'autres utilisent Entity Framework, d'autres utilisent nHibernate, d'autres utilisent des blocs de données Enterprise Library, etc ... tout dépend de vos besoins et de vos préférences.

1

Utilisez un ORM. Pour en savoir plus sur ORM, visitez http://en.wikipedia.org/wiki/Object-relational_mapping. Quelques choix pour .Net sont:

  • NHibernate: Le plus puissant mais a une courbe d'apprentissage profonde. Gratuit et open source.
  • Entity Framework: EF1 n'était pas très prometteur Mais il semble que Microsoft investisse énormément car EF4 est très plus puissant. Puisque vous avez mentionné ASP.Net 4, je vous suggère de regarder EF4.
  • SubSonic A une courbe d'apprentissage rapide. Facile à utiliser. Idéal pour les petites et moyennes applications IMO. Gratuit et open source.

Les ORM commerciaux les plus célèbres sont Active Record, LLBLGen (qui a son propre ORM et est également un générateur OU-Mapping), DevForce (gratuit pour les bases de données avec moins de 10 tables)
Vous pourriez vouloir prendre Regardez this blog post pour voir une liste des plus célèbres ORM disponibles.

1

Au lieu de vous dire d'utiliser un ORM, je vais vous montrer comment je le fais (tapé de la mémoire) (et je vais être downmodded et flamebaited et qui sait quoi d'autre):

Je vois que vous faites ce que je fais, ce qui est à savoir:

SqlDataReader myReader = null; 
    SqlCommand SQLcmd = new SqlCommand(); 
    SqlConnection SQLConn = new SqlConnection(); 
    String SQLStatement = "Select this 'nd That"; 
    SQLConn.ConnectionString = SQLConnectionString; 
    SQLConn.Open(); 
    SQLcmd.Connection = SQLConn; 
    SQLcmd.CommandText = SQLStatement; 
    myReader = SQLcmd.ExecuteReader(); 
    while (myReader.Read()) 
    { 
     //Do some awesome 
    } 
    SQLConn.Close(); 
} 

Et donc je fais quelque chose de similaire.Notez que vous créez de nouvelles SqlCommand, new SqlConnection, et que vous utilisez un sqlConnectionString commun donc je fais ce (que vous devez être en mesure de recharger à partir d'un lieu central, yah?):

public class Global{ 
    public string ConnectionString {get;set;} 
    public Global(){ 
    ConnectionString = //load from wherever, this allows me to reload it later, via API? ;) 
    } 
    public SqlCommandFactory(string sprocName, SqlConnection con){ 
    return new SqlCommand{ 
     CommandText = sprocName, 
     Connection = con, 
     CommandTimeout = 0, 
     ConnectionTimeout = 0, 
     CommandType = StoredProcedure 
    }; 
    } 
} 

//in my other class that uses this code: 
public List<string> /* for simplicity sake, strigns */ GetListOfStringsFromDatabase(){ 
    List<string> returnValue = new List<string>(); 

    // use of using ensures that I don't forget to clean something up here!!!! 
    using (SqlConnection con = new SqlConnection(Global.ConnectionString)) { 
    SqlCommand cmd = Global.SqlCommandFactory("mysproc", con); 
    cmd.Parameters.Add("@param1", SqlDbType.VarChar).Value = "somestring"; 

    con.Open(); 
    using (SqlDataReader reader = cmd.ExecuteReader()) { 
     while (reader.Read()) { 
     returnResult.Add(reader[0].ToString()); 
     } 
    } 
    } 

return returnValue; 
} 

Mais l'ORM serait probablement mieux. Juste pas quelque chose que nous ressentons fonctionne bien pour notre situation.