172 lines
7.2 KiB
C#
172 lines
7.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.SQLite;
|
|
using System.IO;
|
|
|
|
namespace FahrzeugVerwaltung
|
|
{
|
|
public class DatabaseService
|
|
{
|
|
private readonly string _connectionString;
|
|
private readonly string _dbPath;
|
|
|
|
public DatabaseService()
|
|
{
|
|
_dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "fahrzeuge.db");
|
|
_connectionString = $"Data Source={_dbPath};Version=3;";
|
|
ErstelleDatenbank();
|
|
}
|
|
|
|
// Erstellt Datenbank und Tabelle
|
|
private void ErstelleDatenbank()
|
|
{
|
|
using var connection = new SQLiteConnection(_connectionString);
|
|
connection.Open();
|
|
string query = @"
|
|
CREATE TABLE IF NOT EXISTS Fahrzeuge (
|
|
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
Marke TEXT NOT NULL,
|
|
Modell TEXT NOT NULL,
|
|
Baujahr INTEGER NOT NULL,
|
|
Leistung INTEGER NOT NULL,
|
|
Kilometerstand INTEGER NOT NULL,
|
|
Kaufpreis DECIMAL(10,2) NOT NULL,
|
|
Farbe TEXT NOT NULL,
|
|
ErstelltAm DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
)";
|
|
using var command = new SQLiteCommand(query, connection);
|
|
command.ExecuteNonQuery();
|
|
}
|
|
|
|
// Speichert Fahrzeug und gibt neue Id zurück
|
|
public int SpeichereFahrzeug(Fahrzeug fahrzeug)
|
|
{
|
|
using var connection = new SQLiteConnection(_connectionString);
|
|
connection.Open();
|
|
string query = @"
|
|
INSERT INTO Fahrzeuge (Marke, Modell, Baujahr, Leistung, Kilometerstand, Kaufpreis, Farbe)
|
|
VALUES (@Marke, @Modell, @Baujahr, @Leistung, @Kilometer, @Kaufpreis, @Farbe);
|
|
SELECT last_insert_rowid();";
|
|
using var command = new SQLiteCommand(query, connection);
|
|
command.Parameters.AddWithValue("@Marke", fahrzeug.Marke);
|
|
command.Parameters.AddWithValue("@Modell", fahrzeug.Modell);
|
|
command.Parameters.AddWithValue("@Baujahr", fahrzeug.Baujahr);
|
|
command.Parameters.AddWithValue("@Leistung", fahrzeug.Leistung);
|
|
command.Parameters.AddWithValue("@Kilometer", fahrzeug.Kilometerstand);
|
|
command.Parameters.AddWithValue("@Kaufpreis", fahrzeug.Kaufpreis);
|
|
command.Parameters.AddWithValue("@Farbe", fahrzeug.Farbe);
|
|
return Convert.ToInt32(command.ExecuteScalar());
|
|
}
|
|
|
|
// Lädt alle Fahrzeuge
|
|
public List<Fahrzeug> LadeAlleFahrzeuge()
|
|
{
|
|
var fahrzeuge = new List<Fahrzeug>();
|
|
using var connection = new SQLiteConnection(_connectionString);
|
|
connection.Open();
|
|
string query = "SELECT * FROM Fahrzeuge ORDER BY Marke, Modell";
|
|
using var command = new SQLiteCommand(query, connection);
|
|
using var reader = command.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
fahrzeuge.Add(new Fahrzeug
|
|
{
|
|
Id = Convert.ToInt32(reader["Id"]),
|
|
Marke = reader["Marke"].ToString(),
|
|
Modell = reader["Modell"].ToString(),
|
|
Baujahr = Convert.ToInt32(reader["Baujahr"]),
|
|
Leistung = Convert.ToInt32(reader["Leistung"]),
|
|
Kilometerstand = Convert.ToInt32(reader["Kilometerstand"]),
|
|
Kaufpreis = Convert.ToDecimal(reader["Kaufpreis"]),
|
|
Farbe = reader["Farbe"].ToString()
|
|
});
|
|
}
|
|
return fahrzeuge;
|
|
}
|
|
|
|
// Sucht Fahrzeuge mit Text
|
|
public List<Fahrzeug> SucheFahrzeuge(string suchbegriff)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(suchbegriff))
|
|
return LadeAlleFahrzeuge();
|
|
|
|
var fahrzeuge = new List<Fahrzeug>();
|
|
using var connection = new SQLiteConnection(_connectionString);
|
|
connection.Open();
|
|
string query = @"
|
|
SELECT * FROM Fahrzeuge
|
|
WHERE Marke LIKE @S
|
|
OR Modell LIKE @S
|
|
OR Farbe LIKE @S
|
|
OR CAST(Baujahr AS TEXT) LIKE @S
|
|
ORDER BY Marke, Modell";
|
|
using var command = new SQLiteCommand(query, connection);
|
|
command.Parameters.AddWithValue("@S", $"%{suchbegriff}%");
|
|
using var reader = command.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
fahrzeuge.Add(new Fahrzeug
|
|
{
|
|
Id = Convert.ToInt32(reader["Id"]),
|
|
Marke = reader["Marke"].ToString(),
|
|
Modell = reader["Modell"].ToString(),
|
|
Baujahr = Convert.ToInt32(reader["Baujahr"]),
|
|
Leistung = Convert.ToInt32(reader["Leistung"]),
|
|
Kilometerstand = Convert.ToInt32(reader["Kilometerstand"]),
|
|
Kaufpreis = Convert.ToDecimal(reader["Kaufpreis"]),
|
|
Farbe = reader["Farbe"].ToString()
|
|
});
|
|
}
|
|
return fahrzeuge;
|
|
}
|
|
|
|
// Aktualisiert Fahrzeug
|
|
public bool AktualisiereFahrzeug(Fahrzeug fahrzeug)
|
|
{
|
|
using var connection = new SQLiteConnection(_connectionString);
|
|
connection.Open();
|
|
string query = @"
|
|
UPDATE Fahrzeuge
|
|
SET Marke=@Marke,
|
|
Modell=@Modell,
|
|
Baujahr=@Baujahr,
|
|
Leistung=@Leistung,
|
|
Kilometerstand=@Kilometer,
|
|
Kaufpreis=@Kaufpreis,
|
|
Farbe=@Farbe
|
|
WHERE Id=@Id";
|
|
using var command = new SQLiteCommand(query, connection);
|
|
command.Parameters.AddWithValue("@Id", fahrzeug.Id);
|
|
command.Parameters.AddWithValue("@Marke", fahrzeug.Marke);
|
|
command.Parameters.AddWithValue("@Modell", fahrzeug.Modell);
|
|
command.Parameters.AddWithValue("@Baujahr", fahrzeug.Baujahr);
|
|
command.Parameters.AddWithValue("@Leistung", fahrzeug.Leistung);
|
|
command.Parameters.AddWithValue("@Kilometer", fahrzeug.Kilometerstand);
|
|
command.Parameters.AddWithValue("@Kaufpreis", fahrzeug.Kaufpreis);
|
|
command.Parameters.AddWithValue("@Farbe", fahrzeug.Farbe);
|
|
return command.ExecuteNonQuery() > 0;
|
|
}
|
|
|
|
// Löscht Fahrzeug
|
|
public bool LoescheFahrzeug(int id)
|
|
{
|
|
using var connection = new SQLiteConnection(_connectionString);
|
|
connection.Open();
|
|
string query = "DELETE FROM Fahrzeuge WHERE Id=@Id";
|
|
using var command = new SQLiteCommand(query, connection);
|
|
command.Parameters.AddWithValue("@Id", id);
|
|
return command.ExecuteNonQuery() > 0;
|
|
}
|
|
|
|
// Zählt Fahrzeuge
|
|
public int HoleAnzahlFahrzeuge()
|
|
{
|
|
using var connection = new SQLiteConnection(_connectionString);
|
|
connection.Open();
|
|
string query = "SELECT COUNT(*) FROM Fahrzeuge";
|
|
using var command = new SQLiteCommand(query, connection);
|
|
return Convert.ToInt32(command.ExecuteScalar());
|
|
}
|
|
}
|
|
}
|