Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datenbank wird nicht befüllt
Quaneu
myCSharp.de - Member

Avatar #avatar-3126.jpg


Dabei seit:
Beiträge: 685
Herkunft: Regensburg

Themenstarter:

Datenbank wird nicht befüllt

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Quaneu am .
private Nachricht | Beiträge des Benutzers
jaipur
myCSharp.de - Member



Dabei seit:
Beiträge: 127

beantworten | zitieren | melden

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"
private Nachricht | Beiträge des Benutzers
Quaneu
myCSharp.de - Member

Avatar #avatar-3126.jpg


Dabei seit:
Beiträge: 685
Herkunft: Regensburg

Themenstarter:

beantworten | zitieren | melden

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....
private Nachricht | Beiträge des Benutzers
jaipur
myCSharp.de - Member



Dabei seit:
Beiträge: 127

beantworten | zitieren | melden

öhm, ich glaube da fehlt noch ein DatabaseCreate? und dein connectionString sieht mir immer noch "komisch" aus...
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.976

beantworten | zitieren | melden

@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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von FZelle am .
private Nachricht | Beiträge des Benutzers
Quaneu
myCSharp.de - Member

Avatar #avatar-3126.jpg


Dabei seit:
Beiträge: 685
Herkunft: Regensburg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
haarrrgh
myCSharp.de - Member



Dabei seit:
Beiträge: 208
Herkunft: Raum Köln

beantworten | zitieren | melden

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.
  2. 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.
  3. 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!
private Nachricht | Beiträge des Benutzers
Quaneu
myCSharp.de - Member

Avatar #avatar-3126.jpg


Dabei seit:
Beiträge: 685
Herkunft: Regensburg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers