Laden...

Datenbank wird nicht befüllt

Letzter Beitrag vor 13 Jahren 8 Posts 1.743 Views
Datenbank wird nicht befüllt

Hallo,
ich versuche mich gerade an einer Datenbank, doch diese zwinkt mich gerade in die Knie...
Ich will in dem Execute eines Command die Daten in die Datenbank schreiben (ist eine Microsoft SQL Server-Datenbankdatei (SqlClient)).

Der Code sieht wie folgt aus:


public void Execute(object parameter)
        {
            SqlCeConnection conn = new SqlCeConnection("Data Source = Datenbank\\Daten.sdf");
            conn.Open();
            SqlCeDataAdapter adp = new SqlCeDataAdapter();
            // Create the SelectCommand
            SqlCeCommand cmd = conn.CreateCommand();
            cmd.CommandText = "SELECT * FROM Kontakte";
            adp.SelectCommand = cmd;

            // Create the InsertCommand
            //
            cmd = conn.CreateCommand();
            cmd.CommandText = "INSERT INTO Kontakte (ID, Vorname, Nachname, Telefonnumer, Handynummer, Strasse, Hausnummer, PLZ, Ort, Land) " + "VALUES (@ID, @Vorname, @Nachname, @Telefonnumer, @Handynummer, @Strasse, @Hausnummer, @PLZ, @Ort, @Land)";

            // Add the parameters for the InsertCommand.
            cmd.Parameters.Add("@ID", SqlDbType.Int, 4, "ID");
            cmd.Parameters.Add("@Vorname", SqlDbType.NChar, 100, "Vorname");
            cmd.Parameters.Add("@Nachname", SqlDbType.NChar, 100, "Nachname");
            cmd.Parameters.Add("@Telefonnumer", SqlDbType.Int, 4, "Telefonnumer");
            cmd.Parameters.Add("@Handynummer", SqlDbType.Int, 4, "Handynummer");
            cmd.Parameters.Add("@Strasse", SqlDbType.NChar, 100, "Strasse");
            cmd.Parameters.Add("@Hausnummer", SqlDbType.NChar, 40, "Hausnummer");
            cmd.Parameters.Add("@PLZ", SqlDbType.Int, 4, "PLZ");
            cmd.Parameters.Add("@Ort", SqlDbType.NChar, 100, "Ort");
            cmd.Parameters.Add("@Land", SqlDbType.NChar, 100, "Land");
            adp.InsertCommand = cmd;

            DataSet ds = new DataSet();
            adp.Fill(ds);
            ds.Tables[0].Rows.Add(new object[] {0, "Test", "Test", 0, 0, "nix", "nix", 0, "nix", "nix" });
            adp.Update(ds.Tables[0]);
            adp.InsertCommand.Dispose();
            adp.SelectCommand.Dispose();
        }

Nach dem letzten Befehl ist auch eine Zeiel in meiner Tabelle, doch es wird nicht in die Datenbank geschreiben, denn diese bleibt immer leer.
Was mache ich den falsch? Habe mich genau an msdn gehalten.

Viele Grüße
Quaneu

wäre eventuell das hier eine möglichkeit: public override int ExecuteNonQuery ()

und außerdem finde ich deinen connectionString etwas merkwürdig
Ist: Data Source = Datenbank\Daten.sdf
Soll: Data Source = ".\Datenbank\Daten.sdf"

Habs jetzt mal so probiert:


SqlCeConnection conn = new SqlCeConnection("Data Source = Datenbank\\Daten.sdf");
conn.Open();
SqlCeCommand cmd = new SqlCeCommand("INSERT INTO Kontakte (Vorname, Nachname, Telefonnumer, Handynummer, Strasse, Hausnummer, PLZ, Ort, Land) VALUES ('Vorname', 'Nachname', 767, 567, 'Strasse', 'Hausnummer', 89, 'Ort', 'Land')", conn);
int test = cmd.ExecuteNonQuery();
conn.Close();

Doch leider auch wieder ohne Erfolg. test steht zwar auf 1 aber wenn in der Datenbank steht trotzdem nichts....

öhm, ich glaube da fehlt noch ein DatabaseCreate? und dein connectionString sieht mir immer noch "komisch" aus...

@Quaneu:
Du bist sicher, das du in die richtige Datenbank schaust?

Auch solltest Du dringend erst eine Einleitung zu ADO.NET durcharbeiten statt irgendwas zusammenzukopieren.

Ausserdem benutzt du den SqlServer Compact und nicht den "richtigen".
Deswegen benutzt du auch nicht SqlClient sondern den SqlCe Namespace.

Als erstes will ich mich mal bedanken für eure schnelle Hilfe. Vielen vielen Dank.

Ja, hab nämlich nur die eine und die kann ich ja im Server-Explorer anschauen.

Das mit dem SqlCe hab ich auch bedacht, wenn ich nämlich den "richtigen" nehme kommt ja eine "kryptische" Fehlermeldung, wenn man Open() aufruft.

Werde mich jetzt mal ein bisschen tiefer einlesen und hoffentlich bald meinen Fehler finden. Denn eigentlich habe ich es nach der Anleitung von msna gemacht.

Nein, FZelle meint bestimmt was anderes:

Wir glauben Dir daß Du nur eine Datenbank hast, aber Du hast die bestimmt in Deiner Projektmappe eingebunden und so eingestellt, daß sie beim Kompilieren & Debuggen in den Ausgabeordner kopiert wird.
Richtig?

Wenn ja, dann hast Du nämlich folgendes Verständnisproblem:1.Du startest den Debugger mit F5, und Dein Programm wird kompiliert und zusammen mit der Datenbank in den Ordner bin/debug (Ausgabeordner!) kopiert. 1.Dein Programm läuft in diesem Ordner und fügt den Datensatz ordnungsgemäß ein, aber natürlich in die Kopie der Datenbank, die dort liegt, und nicht in die originale in der Projektmappe. 1.Nachdem das Programm gelaufen ist, schaust Du in die originale DB in Deiner Projektmappe und findest den Datensatz dort nicht - aber der ist ja auch nicht dort eingefügt worden, sondern in die Kopie der DB im Ordner bin/debug!

Ach so, entschuldigt bitte, dass habe ich gar nicht bedacht.

Du hast nämlich vollkommen recht. Sie wird immer kopiert. Werde das jetzt mal umstellen und dann muss es ja funktionieren.
Auch dir vielen vielen vielen Dank.