2016-05-21 22 views
1

Ich habe MDF-Datei, die ich als DB verwenden und verbinden mit Linq-to-SQL.C# 2-Versionen der gleichen MDF-Datei

meine Verbindungszeichenfolge ist:

<add name="TasteTeam.Properties.Settings.TasteDBConnectionString" connectionString="Data Source=(LocalDB)\v11.0; AttachDbFilename=|DataDirectory|\TasteDB.mdf;Integrated Security=True" providerName="System.Data.SqlClient" /> 

mein Problem ist, dass, wenn ich das Programm ausführen und fügt Daten in eine Tabelle fügt sie in die MDF-Datei dass im Ordner sind anstelle der Haupt-MDF-Datei .

Diese Situation bewirkt, dass die MDF-Datei jedes Mal leer ist, wenn ich mein Programm neu starte, anstatt die Daten persistent zu speichern.

was kann ich tun sowohl MDF und die tmp MDF-Datei in den Papierkorb die gleiche Datei (i bereits versucht, die alle „Kopie an das Ausgabeverzeichnis“ Optionen, aber nichts scheint zu helfen) machen

+0

http://stackoverflow.com/questions/17147249/why-saving-changes-to-a-database-fails/17147460#17147460. – Steve

+0

@Steve Ich habe mir deine Antwort angesehen und es ist in der Tat sehr hilfreich, aber kannst du bitte einige Dinge erklären, die mir nicht klar genug waren? 1. indem ich 2 Verbindungszeichenfolgen erzeuge, wie kann ich beide MDF-Dateien persistent halten? 2.Gibt es eine Möglichkeit, nur 1 MDF-Datei zu verwenden, um damit zu arbeiten (ich prever nicht die im BIN-Ordner, weil es jedes Mal gelöscht wird) – Jynxed

+0

Ändern Sie die Eigenschaft Copy To OutputDirectory zu Copy Newer. Dies verhindert, dass Visual Studio vom Projektordner in den Arbeitsordner kopiert wird. Ansonsten verwenden Sie die vorgeschlagene Lösung von marc_s unten. So funktioniert DataDirectory – Steve

Antwort

1

Die ganze AttachDbFileName = Ansatz ist fehlerhaft - im besten Fall! Wenn Sie Ihre App in Visual Studio ausführen, kopiert sie die Datei .mdf (von Ihrem Verzeichnis App_Data zum Ausgabeverzeichnis - normalerweise .\bin\debug - wo Ihre App läuft) und höchstwahrscheinlich, Ihre INSERT funktioniert gut - aber Sie sind nur Blick auf die falsche .mdf-Datei am Ende!

Wenn Sie bei diesem Ansatz bleiben möchten, dann versuchen Sie einen Breakpoint auf myConnection.Close() Anruf - und dann überprüfen Sie die .mdf Datei mit SQL Server Mgmt Studio Express - Ich bin fast sicher, dass Ihre Daten da sind.

Die wirkliche Lösung meiner Meinung nach würde

  1. installieren SQL Server Express sein (und Sie haben bereits das sowieso getan)

  2. installieren SQL Server Management Studio Express

  3. erstellen Sie Ihre Datenbank in SSMS Express, geben Sie einen logischen Namen (z. B. TasteDB)

  4. verbinden Sie es mit seiner logischen Datenbank-Name (gegeben, wenn Sie es auf dem Server erstellen) - und nicht mit physischen Datenbankdateien und Benutzerinstanzen rum. In diesem Fall würde die Verbindungszeichenfolge so etwas wie:

    Data Source=.\\SQLEXPRESS;Database=TasteDB;Integrated Security=True 
    

    und alles andere ist genau das gleiche wie vorher ...

Auch Aaron Bertrandsche ausgezeichnete Blog-Post Bad habits to kick: using AttachDbFileName für mehr sehen Hintergrundinformation.

+1

Der Weg zur Hölle ist mit guten Absichten gepflastert – Steve

+0

Danke für die Antwort. Was ist, wenn ich mit dem AttachDbFileName-Ansatz arbeiten muss und weiterhin möchte, dass meine Daten in der Haupt-MDF-Datei angezeigt werden? meine Inserts funktionieren perfekt, aber wie du erwähnt hast, werden sie zu verschiedenen MDF-Dateien hinzugefügt und sobald ich das Projekt neu erstellt habe, sind meine Daten verschwunden (weil die temporäre MDF-Datei im bin-Ordner verschwunden ist) – Jynxed