SQL verbindung C# sinnvoll schachteln

julia23

Mitglied
Hallo,

ich will mehrere Daten aus meiner SQL-Datenbank holen. Dabei stelle ich mir gerade die Frage, wie ich den Code lesbar gestalte.

Mal ein Beispiel. Ich will für jede Abfrage eine Methode erstellen.
C#:
private string queryStringPerson = "SELECT Name FROM Person;";
private string queryStringAuto = "SELECT Kennzeichen FROM Auto;";

 protected override void OnStart(string[] args)
  {

  string str = "Data Source=(local);Initial Catalog=...;"
  + "Integrated Security=...";
  ErstellePerson(str);
  ErstelleAuto(str);
  
  }

private static void ErstellePerson(string connectionString)
  {
  string queryString = queryStringPerson 

  using (SqlConnection connection =
  new SqlConnection(connectionString))
  {
  SqlCommand command =
  new SqlCommand(queryString, connection);
  connection.Open();
  connection.Close();

  }
  }

private static void ErstelleAuto(string connectionString)
  {
  string queryString = queryStringAuto

  using (SqlConnection connection =
  new SqlConnection(connectionString))
  {
  SqlCommand command =
  new SqlCommand(queryString, connection);
  connection.Open();
  connection.Close();

  }
  }
Ich muss aber dann tatsächlich in jeder Methode redundanten Code schreiben.

z.B hier doppelt:

SqlCommand command =
new SqlCommand(queryString, connection);

Wäre super dankbar für optimierungsvorschläge!
 
Zuletzt bearbeitet von einem Moderator:

Spyke

Premium-User
bitte Code Tags verwenden macht das ganze lesbarer.

Ansonsten haben wir es bei uns ungefähr so:

Wir haben bei uns eine Methode GetConnection.
Dieses liefert direkt schon eine geöffnete Datenbankverbindung vom Typ DbConnection (SqlConnection ist auch davon abgeleitet).
das heißt ich muss mich um den ganzen Connection String nicht kümmern und bekomme schon eine fertige Verbindung.
Das wäre ev. eine Stelle die du zusammenfassen kannst.
Code:
public static DbConnection GetConnection(...)

Als nächsten könntest du eine Methode machen welche einen ausgewerten DbDatareader zurück liefert.
Code:
public static DbDataReader ExecuteReader(DbConnection con, string sql, optional object params)
dieser könnte sich um den DbCommand aufbau kümmern
oder auch
Code:
public static int ExecuteScalar(DbConnection con, string sql, optional object params)

das ist so bei uns in einer DLL gekappelts die jeder verwendet.

P.S:
der parameter params wird bei uns syntaxtisch selbst ausgewertet ob im SQL @ oder ? als parameter angaben auftauchen.
Anhand des typens des jeweiligen Parameters wird ein entsprechendes DbParameter für das DbCommand erzeugt.