Laden...

Winforms-Projekt mit SQLite als Embedded Database

Erstellt von BlackSimon vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.522 Views
BlackSimon Themenstarter:in
42 Beiträge seit 2018
vor 5 Jahren
Winforms-Projekt mit SQLite als Embedded Database

verwendetes Datenbanksystem: <SQLite>

Hallo Leute,

es geht um die Lieblingsdatenbank SQLite.

In der Entwicklungsumgebung funtkioniert alles bestens.
SQLite habe ich über Nuget installiert.
Datenbank erstellt, Tabelle erstellt.
Ich kann die Datensätze nach Programmstart abrufen usw.

Ich habe dann versucht über Projekt - Eigenschaften - Veröffentlichen eine Setup-Routine zu erstellen.

Ein Menüeintrag wurde auch erstellt.

Wenn ich drauf klicke, sehe ich für ein paar Sekunden die Eieruhr und das wars.

Muss ich dem Projekt die System.Data.SQLite.dll noch hinzufügen?

16.806 Beiträge seit 2008
vor 5 Jahren

Sprichst Du nun von einem Problem mit Sqlite, oder von einem völlig anderen Thema: das Setup Project?

Ich kenne zwar Rechtsklick -> Veröffentlichen; aber Projekt -> Eigenschaften -> Veröffentlichen habe zumindest ich nicht.
Von welchem Visual Studio sprichst Du denn? Wir können leider nicht hellsehen, wie Dein Environment aussieht.

[Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden schon gemacht?

BlackSimon Themenstarter:in
42 Beiträge seit 2018
vor 5 Jahren

Es gibt verschiedene Möglichkeiten zu Veröffentlichen.
Meine Version ist wahrscheinlich etwas umständlicher.

286 Beiträge seit 2011
vor 5 Jahren

Ich kenne zwar Rechtsklick -> Veröffentlichen; aber Projekt -> Eigenschaften -> Veröffentlichen habe zumindest ich nicht.

In WinForms-Projekten versteckt sich da die ClickOnce-Veröffentlichung

Wenn ich drauf klicke, sehe ich für ein paar Sekunden die Eieruhr und das wars.

Du müsstest etwas genauer erläutern wie du im ClickOnce-Assisenten was eingestellt hast. Der deployed dann eigentlich recht zuverlässig. Ich habe gerade mal in ein altes WinForms-Projekt mit SQLite Db reingeschaut: Alle benötigten DLLs werden da auf jeden Fall mitgeliefert.

Meine Vermutung:
Du hast in deinem Code keine Routine die die SQLite-Datei erzeugt, die wird natürlich nicht mit der Installation ausgeliefert.
D.h. du musst beim Programmstart als erstes sowas aufrufen:


if(!File.Exists(@"pathToDb"))
{
//init Database
}

Ist auch dahingehend sinnvoll falls ein eifriger User beschließt die DB zu löschen, dann sind zwar die Daten weg aber das Programm schmiert nicht immer ab, weil es sie nicht finden kann.

Edit:
Ich würde auf die gleiche Art auch die Integrität der Datenbank prüfen, ob alle erwarteten Tables usw da sind.

Beste Grüße
emuuu

2+2=5( (für extrem große Werte von 2)

BlackSimon Themenstarter:in
42 Beiträge seit 2018
vor 5 Jahren

Ich bin überrascht das mein Weg nicht bekannt ist.
So wurde mir das in der Schule sogar beigebracht.

16.806 Beiträge seit 2008
vor 5 Jahren

Das ist durchaus bekannt - der Fehler meiner Aussage war, dass ich kein ClickOnce installiert habe und dementsprechend das auch nicht gesehen habe.
ClickOnce ist auch nur sehr minimalistisch; eher nicht für Unternehmenszwecke. Hier verwendet man eher WIX oder eben die alten Setup Projekte, die man als VS2017 Extension immer noch nutzen kann.

Ändert aber an der Aussage von emuuu nichts.

BlackSimon Themenstarter:in
42 Beiträge seit 2018
vor 5 Jahren

ClickOnce sagt mir jetzt nichts. Kenne ich nur von amazon.de
Soweit ich mich erinnere musste ich diesbezüglich nichts nachinstallieren.
Das Veröffentlichen ist standardmäßig in Visual Studio 2017 vorhanden.

@emuuu
ich habs jetzt über einen Button gelöst.
Damit die DB nicht bei jedem Programmstart überschrieben wird bzw, neu erstellt wird und nichts drinsteht, habe ich die if-Abfrage eingebaut.


 private void button1_Click(object sender, EventArgs e)
        {
            if (!File.Exists("SQLTutorial.sqlite"))
            {
                SQLiteConnection.CreateFile("SQLTutorial.sqlite");
                btn_db.Enabled = false;
            }            
        }

Ich habe allerdings immer noch das Problem, das das installierte Programm gar nicht erst startet. Es erscheint für ein paar Sekunden die Eieruhr/ oder der animierte Kreis heutzutage und das wars.

16.806 Beiträge seit 2008
vor 5 Jahren

ClickOnce sagt mir jetzt nichts. Kenne ich nur von amazon.de

Das bei Amazon nennt sich OneClick.
Du verwendest hier jedoch Google-Suche nach ClickOnce

Evtl. solltest Du Dich vorher mit den Themen vertraut machen, die Du in Deiner Software verwenden willst - jedenfalls wäre das ratsam.
Schließlich gehst Du ohne Informationen natürlich in Gefahr, voll gegen die Wand zu fahren.

Darüber hinaus gehört Anwendungslogik oder gar Datenbank-Aktionen nicht in den UI-Code.
[Artikel] Drei-Schichten-Architektur

Was in einer Visual Studio Installation enthalten ist und was nicht; dabei kommt es an, welche Features man im Installer aktiviert.
Nicht jeder installiert sich alles.

5.657 Beiträge seit 2006
vor 5 Jahren

Hi BlackSimon,

s erscheint für ein paar Sekunden die Eieruhr/ oder der animierte Kreis heutzutage und das wars.

Das ist in der Regel ein Zeichen dafür, daß es beim Programmstart eine Exception gibt, die nicht abgefangen wird. Ursache dafür kann ein eine fehlende DLL sein, oder eine fehlende Datenbankdatei, aber auch was ganz anderes. Du solltest ein vernüftiges Exception-Handling implementieren, damit der Benutzer auch eine sinnvolle Fehlermeldung angezeigt bekommt, wenn etwas schief geht. Ansonsten hilft beim Fehleraufspüren: debuggen, testen und loggen.

Weeks of programming can save you hours of planning