2010-10-21 4 views
12

Jestem nowicjuszem .NET i słyszałem o kilku różnych sposobach sprawdzania bazy danych SQL Server, takich jak ADO.NET i struktura encji.Najlepszy sposób uzyskiwania dostępu do bazy danych SQL Server przy użyciu C# .Net

Czy ktoś może mi doradzić, w jaki sposób wybrać nowe aplikacje?

Dzięki za pomoc lub sugestie.

+0

Ile masz doświadczenia w programowaniu? Czy korzystałeś już z baz danych? – Onkelborg

+0

Mam pewne podstawowe C# wiedzy i nie wiem SQL, po prostu nie musiałem wcześniej uzyskać dostęp do db w programie C#. – user483267

+1

To otwarte pytanie. Każda dobra odpowiedź będzie zależeć od tego, co chcesz zrobić, od czasu, z którym musisz pracować, oraz od tego, co już znasz/wygodnie. – jac

Odpowiedz

10

Oto przykład przy użyciu EF z generowania kodu z bazy danych (dla prawdziwej aplikacji prawdopodobnie chcesz wygenerować swój DB z kodu, zamiast tego):

  1. Kliknij prawym przyciskiem myszy na projekcie >> Dodaj >> Nowy I tem >> Model danych podmiotu ADO.NET.
  2. Wybierz nazwę dla podmiotów tj MyEntities.edmx, kliknij Dalej
  3. Wybierz „Generowanie z bazy”
  4. skonfigurować „Nowe połączenie”, jeśli nie ma tam już jeden. Kolejny.
  5. Wybierz tabele, widoki i SPROC, które chcesz uwzględnić w encji. Koniec.

Pojawi się plik MyEntities.edmx dodany do projektu. Możesz otworzyć go w widoku projektu, aby zobaczyć diagram twoich jednostek i relacji. Zauważ, że każda jednostka powinna mieć klucz podstawowy - najłatwiej to zrobić, dodając ID - pole automatycznego zwiększania do każdej tabeli lub kolumny GUID. W każdym razie teraz można wyszukać swoją db tak:

// 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 to droga. Aby uzyskać więcej informacji, zobacz http://nhforge.org i http://sf.net/projects/nhibernate.

Główna różnica między Entity Framework i NHibernate polega na tym, że Entity Framework jest tylko dla Microsoft SQL Server (Oracle jest obsługiwany, ale wsparcie nie jest idealne). NHibernate obsługuje bazy danych many many many.

+1

Weź również pod uwagę uzyskanie Fluent NHibernate, jeśli skorzystasz z tej opcji. –

2

Entity Framework jest najprostszym, a wbudowany w.

Wszystko co musisz zrobić, to ważny model, a potem po prostu zaktualizować proste zajęcia, które są automatycznie mapowane do db.

Jest to podobne do aktualizacji normalnych obiektów, ale na końcu wywołujemy SaveChanges.

+1

Jeśli rozpoczynasz projekt, który potrwa kilka lat, nie używaj EF. Spowoduje to zanieczyszczenie twoich obiektów domeny informacjami o stanie. Zmusi Cię do używania specyficznego stylu kodowania ... Narzędzia VisualStudio dla EF są w połowie kopiowane. W przypadku długich projektów zalecam używanie NHibernate. –

+0

Takie BS, po wyjęciu z pudełka otrzymujesz podmioty z państwem. Ale są też inne bardzo proste opcje. Czy ostatnio patrzyłeś na EF? Pozwól, że ci pomogę .. (http://channel9.msdn.com/Blogs/wriju/POCO-Template-in-ADONET-Entity-Framework) – Nix

2

LINQ do SQL jest dość łatwy w użyciu. Możesz przeciągać i upuszczać tabele bazy danych do projektanta i pisać dość proste zapytania w ciągu kilku minut.

NorthwindDataContext db = new NorthwindDataContext(); 

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

Które zasadzie przekładają się select * from Produkty

Kilka innych wybranych próbek:

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

+1

Próba wyświetlenia składni LINQ ... który jest nieco podobny do SQL – Dismissile

+0

Dla ogólnego zastosowania rozwiązania ORM dla nowego projektu chciałbym przejść z NHibernate przez Linq-sql, ale prawdopodobnie będzie to łatwiejsze do pracy po wyjęciu z pudełka. – flatline

2

Moim zdaniem najlepszym rozwiązaniem jest stworzenie klasa pośrednia między db i stosowania (jakiś rodzaj warstwy danych), który kilka metod zarządzania zapytań. opis poniżej bazy na SQLite jako analogię do SQLServer (złącze ADO)

Wspomniana klasa może przez Singleton, a można nazwać przypadek, gdzie chcesz w aplikacji - SQLite to może wyglądać tak:

private static SQLite instance; 

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

można uzyskać instancji w ten sposób:

SQLite db = SQLite.getInstance(); 

Ta klasa może zawierać wiele metod manipulacji danymi na przykład:

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

ale również metody zarządzania transakcjami i diagnostoc. A więc - możesz użyć tej podobnej klasy w swojej aplikacji, jeśli masz inne źródła db lub nawet typy db, możesz utworzyć następną warstwę danych (na przykład dla Oracle lub MSSQL, MySQL ...), z których każda ma implementacje taki sam interfejs na przykład:

IDataBase 

i teraz, masz jakąś elewacji, które można wymienić w miarę potrzeby dynamicznie. Od tego czasu korzystanie z aplikacji db koncentruje się w jednym miejscu, a korzystanie z niej jest czystą przyjemnością - to moja sugestia.

+1

Prawdopodobnie łatwiejsze do wykorzystania istniejącej abstrakcji bazy danych zamiast samemu się obracać, chyba że cel PO jest czysto edukacyjny. – Jimmy

+0

Trudno w takiej sytuacji uzyskać jednolitą warstwę zgodną z wszystkimi subskrybentami – UGEEN