Noch ein paar Änderungsvorschläge zu @el_pollo_diablos Lösung:
Die Klassenvariable _connection mach keinen Sinn, da sie nur in der Methoe CreateTable() benötigt wird. Das wäre dann eher ein Zeichen dafür, dass diese Methode nicht zur Klasse gehört.
Den Dateinamen zur db-Datei würde ich auch über den Konstruktor reinreichen. Das macht die Klasse flexibler, da man dann unterschiedliche Dateien ansprechen könnte. z.B. eine Produktiv- und eine Test-Datei.
Wenn man mit using arbeitet, dann braucht man auch nicht explizit Close() aufrufen, um die Verbindung zu trennen, da dies schon das Dispose() übernimmt, was aufgerufen wird, wenn man using verwendet.
using System.Data.SQLite;
public class AzDBController
{
private readonly string dbFileName;
private readonly string connectionString;
public AzDBController(string dbFileName)
{
this.dbFileName = dbFileName;
this.connectionString = this.CreateConnectionString();
this.CreateTable();
}
private string CreateConnectionString() => $"Data Source={this.dbFileName}; Version=3";
public SQLiteConnection GetConnection()
{
var connection = new SQLiteConnection(connectionString);
connection.Open();
return connection;
}
private void CreateTable()
{
var sql = @"CREATE TABLE IF NOT EXISTS Kunden (
IDKunde INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
, Vorname VARCHAR(200)
, Nachname VARCHAR(200)
)";
using var connection = this.GetConnection();
using var command = new SQLiteCommand(sql, connection);
command.ExecuteNonQuery();
}
}
Jetzt könnte man sich noch überlegen, ob CreateTable() hier überhaupt sinnvoll ist oder doch nicht lieber in eine separate Klasse auslagert. Wenn man es auslagert, hätte man dann eine Klasse, die die Verbindung zur db-Datei handhabt und eine Klasse, die für die Strukturen der Tabellen zuständig ist.