Autor Beitrag
FuttlTobi
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 13.03.12 08:42 
hi
Ich versuche schon seit Tagen mit Hilfe von C# in eine Access-DB zu schreiben. Leider hats bis jetzt noch nicht funktioniert!

Das ist mein Code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Max\DB_Fragen2.mdb");
con.Open();

OleDbDataAdapter myAdapter = new OleDbDataAdapter();
string mywrite = "UPDATE Highscores SET SpielerName=Teest1 WHERE ID=1";
myAdapter.UpdateCommand = new OleDbCommand(mywrite, con);
DataSet mydataset = new DataSet();
myAdapter.Update(mydataset, "Highscores");

Würde mich über (fast) jede Antwort freuen!!! ;)

Greetz euer FuttlDuttlTobi :)

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4437
Erhaltene Danke: 910


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 13.03.12 10:15 
Zitat:
Leider hats bis jetzt noch nicht funktioniert!


Dein Rechner implodiert? Die Welt dreht sich immer noch obwohl du anderes geplant hattest? Wir brauchen schon eine etwas konkretere Problembeschreibungen. Sonst bleibt es beim raten von denjenigen die Lust haben zu raten. Die Fehlermeldung die du vom Compiler oder zur Laufzeit erhältst sollte die Lösung schon enthalten.

Zitat:
string mywrite = "UPDATE Highscores SET SpielerName=Teest1 WHERE ID=1";


Wenn 'Teest1' keine eigene Spalte sondern ein Wert ist mußt du den Text quoten. Die Datenbank kann das nicht automatisch unterscheiden und wird im Moment annehmen das Teest1 ein Spalte ist und dir zur Laufzeit auch eine entsprechende Fehlermeldung liefern.
FuttlTobi Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 13.03.12 10:30 
Sry hab vergessen den Fehler dazu zu schreiben weil ich die Frage zwei mal geschrieben habe :)


Also:
InvalidOperationException
Update: TableMapping['Highscores'] oder DataTable 'Highscores' kann nicht gefunden werden.

kommt bei der Zeile: myAdapter.Update(mydataset, "Highscores");

DIe Datenbank existiert und sie enthält auch diese Tabelle!

lg FuttlTobi
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4437
Erhaltene Danke: 910


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 13.03.12 10:52 
Zitat:
DataSet mydataset = new DataSet();
myAdapter.Update(mydataset, "Highscores");


Die Update Methode eines DataAdapters schreibt die Änderungen die in einer DataTable stecken über das UpdateCommand in die Datenbank zurück. Du hast eine neues Dataset erzeugt ohne das sie eine DataTable "Highscores" enthält. a.) Gibt es also die DataTable "Highscores" nicht und b.) Was nicht existiert enthält auch keine Daten. Es gibt also gar nichts zum updaten.

Da du in deinem UpdateCommand überhaupt keinen Platzhalter verwendest der auf die Daten in einer DataTable anwendbar wären frag ich mich wofür du die brauchst? Da du ein ausformuliertes SQL Kommando hast kannst du das einfach ausführen und den DataAdapter weglassen.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
using(OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Max\DB_Fragen2.mdb"))
{
    con.Open();
    using(OleDbCommand command = new OleDbCommand("UPDATE Highscores SET SpielerName=Teest1 WHERE ID=1", con))
    {
        command.ExecuteNonQuery();
    } 
}


Das macht aber nur Sinn wenn du die Daten aus der Highscores Tabelle nicht parallel noch in irgendeiner DataTable vorhältst. Die bekommt von dieser in der datenbank natürlich nichts mit.

Zitat:
Sry hab vergessen den Fehler dazu zu schreiben weil ich die Frage zwei mal geschrieben habe :)


Sollte das ein Hinweis darauf sein das du ein Crosspost in einem anderen Forum zu diesem Thema abgesetzt hast so sei dir gesagt das das äußerst unbeliebt ist und in den meißten Forum zum sperren des Beitrags führt. Falls es ein Crosspost gibt verlinkt den zumindest hier.
FuttlTobi Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 13.03.12 12:13 
Wenn ich das jz ausführe kommt noch ein Fehler und zwar:

OleDBException, Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4078
Erhaltene Danke: 845

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Di 13.03.12 12:29 
Hallo FuttlTobi,

du solltest dir zuersteinmal ein Tutorial zu ADO.NET durchlesen, z.B.
ADO.NET
Using ADO.NET for beginners
Visual C#: ADO.NET (Kapitel 23 ff.)

Außerdem hoffe ich, daß du schon die Grundlagen von SQL verstanden hast?
Ralf Jansen hat dir ja schon einen Hinweis gegeben;
Ralf Jansen hat folgendes geschrieben:
Wenn 'Teest1' keine eigene Spalte sondern ein Wert ist mußt du den Text quoten...