Datenbank C#?


11.05.2024, 14:44

Entschuldigung dumm von mir. Ich habe eine Sqlite3 Datenbank erstellt und dort drinnen 1 Table jetzt will ich über C#-Code in dieser Tabelle wo die Id = 1 ist eine Column = 0 machen. Das ganze funktioniert auch aber es ändert nicht die Datenbank in meinem Projekt sondern eine kopierte davon in der bin Folder.

jo135  11.05.2024, 14:33

Was ist deiner Meinung nach "die normale" Datenbank, was ist die Datenbank "in der ich bin"? Deine Frage ist unverständlich.

Valentin2882 
Fragesteller
 11.05.2024, 14:45

Entschuldigung habe es gerade ergänzt.

2 Antworten

Der Connectionstring gibt an, mit welcher Datenbank du dich verbindest. Wenn der Pfad, den du als DataSource angibst, relativ ist, geht er von dem Ordner aus, in dem sich dein auszuführendes Programm befindet. Builds wandern typischerweise in den bin-Ordner.


Valentin2882 
Fragesteller
 11.05.2024, 15:03

Danke für deine Antwort allerdings verstehe ich noch nicht so ganz also der Connectionstring gibt an, mit welcher Datenbank man sich verbindet. Also wie kann ich mich nun mit der Datenbank verbinden die nicht in der bin liegt weil die bin wird ja nicht bei Git gepusht.

0
regex9  11.05.2024, 21:44
@Valentin2882

Es wäre besser, die Datenbank in dem Verzeichnis zu lassen, in dem auch die Anwendungsdatei liegt (also innerhalb des bin-Ordners), bzw. die richtige Datenbankdatei in dieses Verzeichnis zu kopieren. So hast du später, wenn du Releaseversionen erstellst, kein Gewusel. Du müsstest in dem Fall ja entweder eine identische Verzeichnisstruktur herausgeben oder deine Datenbankdatei doch in das Verzeichnis der Anwendungsdatei kopieren und den Connectionstring erst immer anpassen.

Wenn du dennoch unbedingt die andere Datenbankdatei ansprechen möchtest, müsstest du entweder einen absoluten oder einen relativen Pfad für die DataSource setzen (wie relative Pfadangaben funktionieren, habe ich in diesem Beitrag schon einmal unter c erklärt).

(...) weil die bin wird ja nicht bei Git gepusht.

Eine Datenbank - SQLite mit eingenommen, gehört auch nicht gerade in ein Repository, denn dort frisst es nur Speicherplatz. Lass dir eine Datenbank mit den notwendigsten Daten (z.B. ein paar Testdaten) stattdessen beim (VS) Build generieren. Du kannst z.B. ein PowerShell-Skript in den Prozess hängen, welches das für dich erledigt oder nutze EF-Core und fülle beim Startup mit C# die Datenbank mit Testdaten.

0

Deiner Frage nach erwartest Du aber, dass er die Datenbank-Datei im Projekt direkt, also neben dem Code, verwendet. Das tut er aber nicht.

Dein Projekt hat einen bin-Ordner, dort landen die ganzen Binaries.
Wenn Du das Projekt startest, werden eben diese Binaries im bin-Ordner gestartet.
Das Arbeitsverzeichnis ist also dieser bin-Ordner.

Wenn Du im ConnectionString einen Dateinamen einträgst, sucht er diese Datei im Arbeitsverzeichnis, also im bin-Ordner. Wenn er dort keine Datei findet, erstellt er sie.

Wenn Du dein Projekt also startest, erwartet es die Datenbank-Datei im Ordner neben der exe-Datei im bin-Ordner. Die Datenbank-Datei im Projekt selber bleibt also unangetastet.

Also wie kann ich mich nun mit der Datenbank verbinden die nicht in der bin liegt weil die bin wird ja nicht bei Git gepusht.

Datenbanken pusht man nicht ins Git-Repository.

Aber wenn Du es trotzdem unbedingt machen willst, dann trag im ConnectionString einen anderen Pfad ein, also sowas wie "../../mydb.db"

Oder stelle in der .gitignore ein, dass die Datenbank-Datei doch im Git Repository erlaubt ist.

PS:

Es ist kein C#-"Skript", C# ist keine Skriptsprache.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler

Valentin2882 
Fragesteller
 11.05.2024, 15:57

Vielen Dank eine Frage noch wenn man normalerweise die Datenbank nicht ins Git Repository pusht und ein anderer dieses Repository Lokal herunterlädt wie kommt er dann an diese Datenbank verwendet man hier ein Datenbankserver?

0
Palladin007  11.05.2024, 16:04
@Valentin2882

Ein Git-Repository enthält immer die vollständige Historie. Jede Änderung in der Datenbank führt also dazu, dass die Datenbank erneut im Repository abgespeichert wird. Das frist unnötig Platz, dauert unnötig beim Klonen, nachträglich entfernen ist furchtbar und es bringt dir auch nichts, weil Du die Versionen eh nicht vergleichen kannst.

Stattdessen seeded man Daten.
Beim Start der Anwendung erställt sie die Datenbank selber, baut das Schema auf und fügt mindestens benötigte Daten hinzu.
So kann jeder das Repository klonen und bekommt eine passend vorbereitete lokale Datenbank.

Mit C# macht man das üblicherweise mit Entity Framework Core, das kümmert sich auch um das Schema und Änderungen mit Hilfe von Migrations, was eine ganze Menge Arbeit abnehmen kann.

Und wenn Du sowas wie für die Anwendung globale Einstellungen hast, ist JSON ein beliebtes Mittel, siehe appsettings.json von ASP.NET Core. Das ist dann auch nur JSON, das zu commiten ist ok und kann auch verglichen werden.

1