2010-10-21 94 views
12

我是.NET新手,聽說過查詢SQL Server數據庫的幾種不同方法,如ADO.NET和實體框架。使用C#.Net訪問SQL Server數據庫的最佳方法

任何人都可以給我一些關於去新應用程序的最佳方式的建議嗎?

感謝您的任何幫助或建議。

+0

你有多少編程經驗?以前使用過數據庫嗎? – Onkelborg 2010-10-21 16:22:44

+0

我有一些基本的C#知識,並且知道SQL,我只是沒有必須在C#程序之前訪問數據庫。 – user483267 2010-10-21 16:23:45

+1

這是一個懸而未決的問題。任何好的答案將取決於你想要做什麼,你必須使用的時間框架,以及你已經熟悉/熟悉的內容。 – jac 2010-10-21 16:24:01

回答

10

下面是使用EF代碼生成從數據庫(一個例子一個真正的應用程序你可能想從代碼中生成你的數據庫):

  1. 右鍵點擊你的項目>>添加>>新建我tem >> ADO.NET實體數據模型。
  2. 您的實體,即MyEntities.edmx選擇一個名稱,然後單擊下一步
  3. 選擇「從數據庫生成」
  4. 配置一個「新建連接」如果沒有一個已經存在。下一個。
  5. 選擇要包含在實體中的表,視圖和SPROC。完。

您將看到一個文件MyEntities.edmx添加到您的項目。您可以在設計視圖中打開它以查看您的實體和關係圖。請注意,每個實體都應該有一個主鍵 - 最簡單的方法是爲每個表或GUID列添加一個ID - 自動增量字段。反正現在你可以查詢你的數據庫是這樣的:

// assuming a "Product" table, which has an entity pluralized to "Products" 

MyEntities db = new MyEntities(); 

var cheapProducts = db.Products.Where(p => p.Price > 30); // var is IEnumerable<Product> 
2

NHibernate是要走的路。有關更多信息,請參閱http://nhforge.orghttp://sf.net/projects/nhibernate

實體框架和NHibernate的主要區別在於實體框架僅適用於Microsoft SQL Server(Oracle是支持的,但支持並不理想)。 NHibernate支持many many many數據庫。

+1

如果你選擇了這個選項,也可以考慮獲得流利的NHibernate。 – 2010-10-21 17:30:03

2

Entity Framework是最簡單的,並且其內置的。

所有你需要做的就是重要的模型,然後只更新簡單的類,即自動映射到你的數據庫。

它就像更新普通對象一樣,但最後調用SaveChanges。

+1

如果您正在啓動持續數年的項目,請勿使用EF。它會用狀態信息污染你的域對象。將迫使您使用特定的編碼風格...用於EF的VisualStudio工具只支持一半。對於長項目,我會推薦使用NHibernate。 – 2010-10-21 16:45:01

+0

這樣的BS,開箱即可獲得具有狀態的實體。但還有其他非常簡單的選擇。你最近還看過EF嗎?讓我幫你..(http://channel9.msdn.com/Blogs/wriju/POCO-Template-in-ADONET-Entity-Framework) – Nix 2010-10-21 16:57:25

2

LINQ to SQL很容易處理。您可以將數據庫表拖放到設計器中,並在幾分鐘內編寫非常簡單的查詢。

NorthwindDataContext db = new NorthwindDataContext(); 

    var products = from p in db.Products 
        select p; 

這將基本上轉化爲SELECT * FROM產品

其他一些選擇的樣本:

var products = from p in db.Products 
        where p.Category.Name == "Beverages" 
        select p; 

    var products = from p in db.Products 
        orderby p.Name 
        select p; 
+2

'var products = db.Products;' – SLaks 2010-10-21 16:26:05

+1

試圖展示LINQ語法...這有點類似於SQL – Dismissile 2010-10-21 16:29:10

+0

對於一個新項目的通用ORM解決方案,我會用NHibernate通過Linq-to-sql,但這可能會更容易與開箱即用。 – flatline 2010-10-21 16:54:40

2

在我看來,最好的解決辦法是創建數據庫和應用程序(某些類型的數據層)之間的中間類的一些用於管理查詢方法。 描述下在SQLite的基礎作爲比喻的SQLServer(ADO連接器)

提到的類可以通過單,你可以調用它的實例,無論你在你的應用程序想要的 - SQLite的它可以看起來像這樣:

private static SQLite instance; 

public static SQLite getInstance() 
{ 
    if(instance == null) 
    { 
    instance = new SQLite(); 
    thread = Thread.CurrentThread.ManagedThreadId; 
    } 
    return instance; 
} 

你可以得到的實例是這樣的:

SQLite db = SQLite.getInstance(); 

這個類可以包含數據操作多種方法,例如:

public SQLiteCommand prepareQuery(string sql) 
{ 
    cmd = new SQLiteCommand(sql, conn); 
    return cmd; 
} 

public SQLiteDataReader executeReader() 
{ 
    return cmd.ExecuteReader(); 
} 

public int executeInt() 
{ 
    object obj = cmd.ExecuteScalar(); 
    return (int)obj; 
} 

還有事務管理和診斷方法。 所以現在 - 如果你有其他的數據庫源,甚至數據庫類型,你可以在你的應用程序中使用這個類的類,你可以創建下一個數據層(例如Oracle或MSSQL,MySQL ...)相同的接口,例如:

IDataBase 

現在,你有某種形式的立面,你可以根據需要動態替換。 從這個時候開始,在應用程序中使用db集中在一個地方,程序員使用它非常高興 - 這是我的建議。

+1

可能更容易使用先前存在的數據庫抽象,而不是旋轉自己的數據庫,除非OP的目標純粹是教育性的。 – Jimmy 2010-10-21 16:58:55

+0

在這種情況下很難獲得與所有用戶兼容的統一層 – UGEEN 2010-10-21 17:06:42

相關問題