2011-12-28 104 views
2

每次我得到的東西從數據庫中,我的代碼是這樣的:如何抽象數據庫層?

using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.v3ConnString)) 
      { 
       conn.Open(); 
       using (SqlCommand command = new SqlCommand()) 
       { 
        command.Connection = conn; 
        command.CommandText = "SELECT ..."; 
        command.Parameters.AddWithValue("...", ...); 
        using (SqlDataReader dr = command.ExecuteReader()) 
        { 
         if (dr.HasRows) 
          someVar = true; 
        } 
       } 
      } 

相反,我想要做的myArray = Db.sql("SELECT ...")或別的東西,如果有更好的辦法。有人能指出我正確的方向嗎?

編輯:我不是在尋找代碼來爲我生成SQL,而是從SQL查詢中獲取數組結果的簡單方法。

+0

你可以閱讀關於DAO的http://en.wikipedia.org/wiki/Data_access_object – Marthin

回答

2

結帳Dapper.NET。這是一個輕量級的ORM,可以簡化這項任務。

+2

不同意這 - stackoverflow使用它,它是在.net上寫的最穩定/最快發展網站之一。 Massive也是很久以前纔開始的,所以它們不是過時的,只是不同的方法。 – Giedrius

1
  1. Entity Framework
  2. NHibernate
  3. Linq 2 SQL(遙遠第三,因爲它是在維護模式下)。
+0

我一定會將Telerik的OpenAccess ORM工具添加到此列表中。它具有比EF更多的功能,並支持比原生SQL Server 2008數據類型(地理定位)更多的EF。 \ – tsells

+0

@tsells有什麼意義? OP似乎並不想要任何它,他想寫他自己的SQL :)另外,Telerik不是免費的,因此很難推薦。 – dasblinkenlight

+0

Telerik OpenAccess是免費的。 http://www.telerik.com/community/promos/freestuff.aspx – tsells

3

這就是「做它的老方法」。如果您正在使用更新版本的框架(> 2.0),請使用linq to sql。你有一個非常好的教程在這裏:http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

+0

+1。不一定是LINQ2SQL,但是任何LINQ層。 – TomTom

+1

不用了,謝謝。我可以編寫好的SQL語句,並且不想爲我自動生成它們。 – Marcus

+0

@IgorK我可以編寫很好的程序集,但我經常讓C編譯器爲我做。你不能擁有你的蛋糕,也不能吃它:你要麼抽象出你的數據庫層,要麼你自己寫SQL,並且保持與數據庫的緊密結合。 – dasblinkenlight

1

NHibernate是最強大的ORMs框架之一。使用NHibernate,你仍然可以編寫SQL查詢,但NHibernate將從Sql類型轉換爲.net類型。

坦率地說,在你的情況下,使用ORM與否沒有區別。如果您不時重複您的代碼,這意味着您的應用程序設計非常糟糕,您需要改進它。 首先,你應該將你的應用程序分成幾層(我只說數據庫訪問)。

  1. 提供了執行自定義sql查詢的能力的圖層,您將使用來自其他圖層的代碼。
  2. 爲您提供漂亮界面並封裝所有數據庫邏輯(包括查詢和對象轉換)的圖層。

等等。您可以添加將從設置中讀取連接字符串的設置圖層,但它全部是可選的。