2010-10-14 57 views
2

目前工作的一個ASP.NET web應用程序和我開始意識到我一遍又一遍地寫相同的鍋爐板代碼..ASP.NET 4 SQL方法?

 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(); 
    } 

.NET世界是怎麼玩現在用SQL?

基本上我怎麼能不花半天時間複製和粘貼該代碼?

是不是每個人都使用Linq to SQL?如果是這樣,請將我指向一個教程!

非常感謝!

丹尼爾

+0

是的,LINQ2SQL或實體框架。首先擊中谷歌應該讓你開始。 – 2010-10-14 14:56:47

+0

該代碼可以很容易地進行DRYD,因此您只需編寫一次即可。但正如其他人所說的那樣,現在流行的選擇是EF。 – bzlm 2010-10-14 15:54:45

+0

你有沒有成功解決這個問題?你還需要幫助嗎? – jcolebrand 2010-12-14 04:26:50

回答

2

一般的心情,這些天是使用某種ORM

流行的選擇是:

LINQ2SQL確實是一個ORM,但它不再在微軟正在積極地開發。

+2

L2S不再被開發。事實上,L2S針對VS 2010進行了更新。它更多地處於維護模式,並將繼續得到支持。 – 2010-10-14 14:55:39

0

沒有「一個」方法。有些人使用Linq進行sql,一些使用Entity Framework,一些使用nHibernate,一些使用企業庫數據塊等等,這一切都取決於您的需求以及您感覺舒適的方面。

1

使用ORM。要了解有關ORM的更多信息,請訪問http://en.wikipedia.org/wiki/Object-relational_mapping。 .Net的一些選擇是:

  • NHibernate:功能最強大但具有很深的學習曲線。免費和開源。
  • 實體框架:EF1並不是很有希望但是,由於EF4功能更強大,似乎微軟正在大力投資。既然你提到了ASP.Net 4,我建議你看看EF4。
  • SubSonic學習曲線很快。使用方便。最適合中小型應用程序IMO。免費和開源。

最著名的商業的ORM是Active RecordLLBLGen(它有自己的ORM,也是一個OR-映射發生器),DevForce(免費擁有不到10個表的數據庫)
你可能要採取查看this blog post以查看可用的最着名的ORM列表。

1

不是告訴你使用ORM的,我要告訴你我是如何做到這一點(從內存類型)(我將要downmodded和flamebaited,誰知道還有什麼):

我看你做什麼我做什麼,這是即:

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(); 
} 

所以我做同樣的事情。請注意,您正在創建新的SqlCommand,新的SqlConnection,並且您使用的是常見的SqlConnectionString所以我這樣做(你需要能夠從一箇中心位置,重裝的一切嗎?):

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; 
} 

但ORM可能會更好。只是不是我們覺得適合我們的情況。

相關問題