Przejdź do treści stopki
Iron Academy Logo
Aplikacja C#
Aplikacja C#

Inne Kategorie

C# SQL Tutorial Połączenie: Dapper + Baza danych SQL Server wyjaśnione

Tim Corey
1h 15m 23s

W lekcji 10 serii "C# App Start to Finish" Tima Corey'a, Tim wyjaśnia, jak połączyć aplikację C# z bazą danych SQL Server używając Dapper. W poprzedniej lekcji aplikacja używała fałszywej warstwy dostępu do danych, która tylko udawała komunikację z SQL. W tym wideo Tim zastępuje ten kod-zastępcę rzeczywistą logiką połączenia SQL i pokazuje, jak ustawia prawdziwe połączenie z bazą danych w sposób czysty, skalowalny i łatwy do utrzymania.

Artykuł ten rozbija kluczowe pojęcia, które Tim omawia i wyjaśnia je w sposób zrozumiały, nawet jeśli jesteś nowy w połączeniach C# SQL lub SQL Server.

Konfiguracja projektu i porządkowanie

Tim rozpoczyna przeglądem struktury rozwiązania i potwierdza zmiany wprowadzone w poprzedniej lekcji. W Program.cs wyjaśnia, że dodał kod, aby połączyć się zarówno z SQL Server, jak i z bazą danych w pliku tekstowym, oraz zmienił formularz startowy na "Create Prize", aby natychmiast przetestować połączenie z bazą danych.

Następnie oczyszcza strukturę projektu, tworząc dwa foldery:

  • Modele

  • Dostęp do danych

Zauważa, że to nie wpływa na funkcjonalność kodu źródłowego, ale pomaga w organizacji. Gdy wrócimy do projektu później, czysta struktura i spójne nazewnictwo ułatwiają jego utrzymanie i rozwijanie.

Dlaczego Dapper?

Tim wyjaśnia, że użyje Dapper jako ORM (Maper relacyjno-obiektowy) dla połączeń SQL. Dapper znajduje się między surowymi poleceniami SQL a wyższych poziomów ORM takich jak Entity Framework.

Tim preferuje Dapper, ponieważ jest:

  • Prawie tak szybki jak surowe ADO.NET

  • Prostszym niż Entity Framework

  • Unika zbędnej złożoności i ciężkiego kodu szablonowego

Wspomina, że Entity Framework może być wolniejszy i cięższy, szczególnie dla małych aplikacji. Do swojego projektu Dapper dostarcza odpowiedniego balansu pomiędzy wydajnością i prostotą.

Instalacja Dapper

Tim demonstruje instalację Dapper przez Menedżera Pakietów NuGet w Visual Studio. Po instalacji Dapper pojawia się w referencjach projektu, a kod połączenia SQL staje się czysty i czytelny.

Dodawanie ciągu połączenia

Aby używać Dapper, potrzebujesz ciągu połączenia. Tim dodaje go do pliku app.config projektu UI, a nie projektu biblioteki, ponieważ biblioteka jest DLL i nie ma własnej konfiguracji.

Ciąg połączenia obejmuje:

  • Data Source (nazwa serwera lub domena maszyny)

  • Initial Catalog (nazwa bazy danych)

  • Integrated Security (uwierzytelnianie Windows)

  • Limit czasu połączenia

  • User ID i Password (jeśli nie używasz uwierzytelniania Windows)

W przykładzie Tima używa on zaufanego połączenia, co oznacza uwierzytelnianie Windows:

Data Source=SQL2016;Initial Catalog=Tournaments;Integrated Security=True;

Podkreśla, że unika to przechowywania danych logowania użytkownika SQL Server w pliku.

GlobalConfig: Pobieranie ciągu połączenia

Aby pobrać ciąg połączenia, Tim dodaje metodę w GlobalConfig:

public static string GetConnectionString(string name)
{
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}

Ta metoda pobiera ciąg połączenia z pliku konfiguracyjnego i zwraca go. Tim dodaje również wymaganą referencję System.Configuration.

Tworzenie połączenia SQL

Tim usuwa kawałek kodu zastępczego i tworzy rzeczywiste SqlConnection używając:

using (IDbConnection connection = new SqlConnection(
GlobalConfig.GetConnectionString("tournaments")))
{
// SQL logic here
}

Używa interfejsu IDbConnection, aby móc zamieniać typy baz danych (SQL lub plik tekstowy) bez zmiany samego kodu.

Blok using jest ważny, ponieważ zapewnia automatyczne zamknięcie połączenia po wyjściu z bloku. Unika to otwartych połączeń, które mogą wyczerpać pulę połączeń lub powodować błędy na serwerze bazy danych.

Tworzenie procedury składowanej

Zamiast pisać surowy SQL wewnątrz C#, Tim używa procedury składowanej. Utrzymuje to logikę SQL w bazie danych i redukuje ryzyka takie jak zastrzyki SQL.

Tworzy on procedurę składowaną o nazwie:

dbo.SP_Prizes_Insert

Ta procedura przyjmuje parametry pasujące do tabeli z nagrodami:

  • @PlaceNumber

  • @PlaceName

  • @PrizeAmount

  • @PrizePercentage

  • @ID (output)

Parametr output zwraca nowo wygenerowany ID używając:

SELECT @ID = SCOPE_IDENTITY()

Zapewnia to zwrócenie ID nowego rekordu do aplikacji C#.

Dynamiczne parametry w Dapper

Z powrotem w C#, Tim używa DynamicParameters Dappera do przesyłania parametrów do procedury składowanej:

var p = new DynamicParameters();
p.Add("@PlaceNumber", model.PlaceNumber);
p.Add("@PlaceName", model.PlaceName);
p.Add("@PrizeAmount", model.PrizeAmount);
p.Add("@PrizePercentage", model.PrizePercentage);
p.Add("@ID", 0, dbType: DbType.Int32, direction: ParameterDirection.Output);

ID jest oznaczony jako Output, a Dapper obsługuje mapowanie parametrów.

Wykonywanie procedury składowanej

Wykonuje procedurę składowaną:

connection.Execute("dbo.SP_Prizes_Insert", p, commandType: CommandType.StoredProcedure);

Execute jest używany, ponieważ wykonuje insert i nie zwraca wierszy jak instrukcja SELECT.

Po wykonaniu kod pobiera ID:

model.ID = p.Get<int>("@ID");
return model;

Testowanie i wyniki

Tim uruchamia aplikację, wypełnia formularz i klika Utwórz Nagrodę. Dane są pomyślnie wstawiane do bazy danych SQL Server. Testuje zarówno:

  • Kwota nagrody

  • Procent nagrody

Obydwa działają, co potwierdza, że połączenie z bazą danych i procedura składowana działają poprawnie.

Wyzwanie projektowe: Wiele złączy danych (1:01:50)

Tim zwraca uwagę na problem z projektem: używanie jednocześnie złączy SQL i pliku tekstowego powoduje niespójne ID.

Dlatego zmienia projekt, aby w danym czasie działało tylko jedno złącze. Dodaje wyliczenie:

TypBazyDanych
{
SQL,
TextFile
}

Zapewnia to, że aplikacja zawsze używa spójnego typu bazy danych i zapobiega mieszaniu danych z różnych źródeł.

Wnioski

Lekcja 10 Tima Corey'a pokazuje podejście rzeczywiste do łączenia aplikacji C# z SQL Server używając Dapper. Porusza tematy:

  • Dodawanie ciągu połączenia

  • Korzystanie z SqlConnection

  • Bezpieczne otwieranie i zamykanie połączeń

  • Korzystanie z procedur składowanych

  • Unikanie zastrzyków SQL

  • Właściwa architektura dla wielu źródeł danych

Jeśli chcesz czystego, szybkiego i łatwego do konserwacji sposobu łączenia C# z bazą danych SQL Server, ta lekcja jest doskonałym przewodnikiem.

Hero Worlddot related to C# SQL Tutorial Połączenie: Dapper + Baza danych SQL Server wyjaśnione
Hero Affiliate related to C# SQL Tutorial Połączenie: Dapper + Baza danych SQL Server wyjaśnione

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie