Zum Fußzeileninhalt springen
Iron Academy Logo
C#-Anwendung
C#-Anwendung

Andere Kategorien

C# SQL-Verbindungstutorial: Dapper + SQL Server-Datenbank erklärt

Tim Corey
1h 15m 23s

In Lektion 10 von Tim Coreys "C# App Start to Finish"-Serie erklärt Tim, wie man eine C#-Anwendung mit einem SQL Server-Datenbank unter Verwendung von Dapper verbindet. In der vorherigen Lektion verwendete die App eine Fake-Datenzugriffsschicht, die nur vorgab, mit SQL zu kommunizieren. In diesem Video ersetzt Tim diesen Platzhaltercode durch eine echte SQL-Verbindung-Logik und zeigt, wie er eine echte Datenbankverbindung auf eine Weise einrichtet, die sauber, skalierbar und leicht zu warten ist.

Dieser Artikel zerlegt die Schlüsselkonzepte, die Tim behandelt, und erklärt sie auf eine Weise, die auch dann Sinn macht, wenn Sie neu bei der C# SQL-Verbindung oder SQL Server sind.

Projekt-Setup & Bereinigung

Tim beginnt mit der Überprüfung der Lösungsstruktur und bestätigt die in der vorherigen Lektion vorgenommenen Änderungen. In Program.cs erklärt er, dass er Code hinzugefügt hat, um sowohl mit SQL Server als auch Textdatei-Datenbanken zu verbinden, und das Startformular auf das "Create Prize"-Formular geändert hat, damit er die Datenbankverbindung sofort testen kann.

Dann bereinigt er die Projektstruktur, indem er zwei Ordner erstellt:

  • Modelle

  • Datenzugriff

Er merkt an, dass dies die Funktionalität des Quellcodes nicht beeinflusst, aber zur Organisation beiträgt. Wenn Sie später zu einem Projekt zurückkehren, erleichtert eine saubere Struktur und konsistente Namensgebung die Wartung und Erweiterung erheblich.

Warum Dapper?

Tim erklärt, dass er Dapper als ORM (Object-Relational Mapper) für SQL-Verbindungen verwenden wird. Dapper sitzt zwischen rohen SQL-Befehlen und höhergelegenen ORMs wie Entity Framework.

Tim bevorzugt Dapper, weil es:

  • Fast so schnell wie rohes ADO.NET ist

  • Einfacher als das Entity Framework ist

  • Unnötige Komplexität und umfangreichen Boilerplate-Code vermeidet

Er erwähnt, dass das Entity Framework langsamer und schwerer sein kann, insbesondere bei kleinen Anwendungen. Für sein Projekt bietet Dapper den richtigen Ausgleich zwischen Leistung und Einfachheit.

Installation von Dapper

Tim demonstriert die Installation von Dapper über den NuGet-Paketmanager in Visual Studio. Nach der Installation erscheint Dapper in den Projektreferenzen und der SQL-Verbindungscode wird sauber und lesbar.

Hinzufügen der Verbindungszeichenfolge

Um Dapper zu verwenden, benötigen Sie eine Verbindungszeichenfolge. Tim fügt es der app.config-Datei des UI-Projekts hinzu, nicht dem Bibliotheksprojekt, da die Bibliothek eine DLL ist und keine eigene Konfiguration hat.

Die Verbindungszeichenfolge umfasst:

  • Datenquelle (Servername oder Maschinendomainname)

  • Anfangskatalog (Datenbankname)

  • Integrierte Sicherheit (Windows-Authentifizierung)

  • Verbindungstimeout

  • Benutzer-ID und Passwort (wenn keine Windows-Authentifizierung verwendet wird)

In Tims Beispiel verwendet er eine vertrauenswürdige Verbindung, das heißt Windows-Authentifizierung:

Datenquelle=SQL2016;Initiales Katalog=Tournaments;Integrierte Sicherheit=True;

Er betont, dass dies das Speichern von SQL Server-Benutzeranmeldedaten in der Datei vermeidet.

GlobalConfig: Verbindungszeichenfolge abrufen

Um die Verbindungszeichenfolge abzurufen, fügt Tim eine Methode in GlobalConfig hinzu:

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

Diese Methode holt die Verbindungszeichenfolge aus der Konfigurationsdatei und gibt sie zurück. Tim fügt auch die erforderliche System.Configuration-Referenz hinzu.

Erstellen der SQL-Verbindung

Tim entfernt den Platzhaltercode und erstellt eine echte SqlConnection unter Verwendung von:

using (IDbConnection connection = new SqlConnection(
    GlobalConfig.GetConnectionString("tournaments")))
{
    // SQL-Logik hier
}

Er verwendet ein IDbConnection-Interface, sodass er Datenbanktypen (SQL oder Textdatei) austauschen kann, ohne den Hauptcode zu ändern.

Der using-Block ist wichtig, da er sicherstellt, dass die Verbindung automatisch geschlossen wird, wenn der Code den Block verlässt. Dies vermeidet offene Verbindungen, die den Verbindungspool erschöpfen oder auf dem Datenbankserver Fehler verursachen können.

Erstellen der gespeicherten Prozedur

Anstatt rohes SQL in C# zu schreiben, verwendet Tim eine gespeicherte Prozedur. Dies hält die SQL-Logik in der Datenbank und reduziert Risiken wie SQL-Injection.

Er erstellt eine gespeicherte Prozedur mit dem Namen:

dbo.SP_Prizes_Insert

Diese Prozedur nimmt Parameter an, die der Preistabelle entsprechen:

  • @Platznummer

  • @Platzname

  • @Preisbetrag

  • @ProzentsatzPreis

  • @ID (Ausgabe)

Der Ausgabeparameter gibt die neu generierte ID mit:

SELECT @ID = SCOPE_IDENTITY()

Dadurch wird sichergestellt, dass die neue Datensatz-ID an die C#-App zurückgegeben wird.

Dynamische Parameter in Dapper

Zurück in C#, verwendet Tim Dappers DynamicParameters, um Parameter an die gespeicherte Prozedur zu senden:

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

Die ID ist als Ausgabe markiert und Dapper übernimmt die Parametermapping.

Ausführen der gespeicherten Prozedur

Er führt die gespeicherte Prozedur aus:

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

Execute wird verwendet, da es eine Einfügung ausführt und keine Zeilen wie eine SELECT-Anweisung zurückgibt.

Nach der Ausführung wird die ID abgerufen:

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

Testen & Ergebnisse

Tim führt die Anwendung aus, füllt das Formular aus und klickt auf Create Prize. Die Daten werden erfolgreich in die SQL Server-Datenbank eingefügt. Er testet beides:

  • Preisbetrag

  • Preisprozentsatz

Beides funktioniert und beweist, dass die Datenbankverbindung und die gespeicherte Prozedur korrekt funktionieren.

Design-Challenge: Mehrere Datenkonnektoren (1:01:50)

Tim hebt ein Designproblem hervor: Die gleichzeitige Verwendung von SQL- und Textdateikonnectors verursacht inkonsistente IDs.

Daher ändert er das Design so, dass nur ein Connector gleichzeitig läuft. Er fügt einen Enum hinzu:

DatenbankTyp
{
    SQL,
    TextDatei
}

Dies stellt sicher, dass die App immer einen konsistenten Datenbanktyp verwendet und verhindert das Mischen von Datenbankdaten aus verschiedenen Quellen.

Abschluss

Tim Coreys Lesson 10 zeigt einen realistischen Ansatz, um eine C#-Anwendung mit SQL Server unter Verwendung von Dapper zu verbinden. Er behandelt:

  • Hinzufügen einer Verbindungszeichenfolge

  • Verwendung von SqlConnection

  • Sicheres Öffnen und Schließen von Verbindungen

  • Verwendung von gespeicherten Prozeduren

  • Vermeidung von SQL-Injection

  • Richtige Architektur für mehrere Datenquellen

Wenn Sie eine saubere, schnelle und wartbare Möglichkeit suchen, C# mit einer SQL Server-Datenbank zu verbinden, ist diese Lektion der perfekte Leitfaden.

Hero Worlddot related to C# SQL-Verbindungstutorial: Dapper + SQL Server-Datenbank erklärt
Hero Affiliate related to C# SQL-Verbindungstutorial: Dapper + SQL Server-Datenbank erklärt

Verdienen Sie mehr, indem Sie teilen, was Sie lieben

Erstellen Sie Inhalte für Entwickler, die mit .NET, C#, Java, Python oder Node.js arbeiten? Verwandeln Sie Ihr Fachwissen in ein zusätzliches Einkommen!

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an