C# Datenbank Insert Problem

martl92

Lieutenant
Registriert
Feb. 2009
Beiträge
598
Ich bin dabei ein kleines Programm als Übung zu schreiben. Mein Problem besteht im Einfügen der Daten in eine Access Datenbank.

Folgenden Programmcode habe ich:

string geschlecht;
string nachname = txt_nachname.Text;
string vorname = txt_vorname.Text;
string sportverein = txt_sportverein.Text;
int startnummer = Convert.ToInt32(txt_startnummer.Text);
DateTime geburtstag = Convert.ToDateTime(txt_datum.Text);

if (rad_mann.Checked)
geschlecht = "m";
else
geschlecht = "w";

//Datenbankanbindung
OleDbConnection anbindung = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\Martin\\Documents\\Verwaltung.mdb");

//Auswahl der Tabelle
OleDbCommand table = new OleDbCommand("select * from Teilnehmer", anbindung);
anbindung.Open();

string select = "select * from Teilnehmer";

OleDbDataAdapter eintragen = new OleDbDataAdapter(select, anbindung);

eintragen.InsertCommand = new OleDbCommand("INSERT INTO Teilnehmer (Nachname, Vorname, Geschlecht, Geburtsdatum, Startnummer) VALUES ("+nachname+","+vorname+","+geschlecht+","+geburtstag+","+startnummer+")");

anbindung.Close(); //Anbindung an die Datenbank wieder schließen

Weitere Daten:
.mdb Datenbank liegt unter C:\Users\Martin\Dokumente\Verwaltung.mdb
Zurzeit werden nur die Daten aus den Textboxen in Variable eingelesen und sollten so in die Datenbank geschrieben werden.

Was mache ich falsch, da es keinen Fehler gibt, aber auch nichts in die db geschrieben wird?

Danke schon mal für eure Hilfe! :)

mfg
 
Code:
eintragen.InsertCommand

ist nur ein insertstring

du musst diesen befehl noch ausführen. Ich glaube es es geht dann mit dem
Code:
eintragen.Update()

guck ma genauer wie du das machst... auf jeden fall hast du nur einen insertcommand string gefüllt mehr nicht
 
Habe nun meine Anbindung überarbeitet, bzw. wie in einem anderen Beispiel, dass ich im Inet gefunden habe programmiert. Das Ergebnis:

//Datenbankanbindung + Auswahl der Tabelle
string anbindung = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Teilnehmerverwaltung.mdb";
string select = "Select * from members";
string insertdata = "INSERT INTO members (nname, vname) Values ('Hans', 'Franz')";
OleDbConnection accesstodata = null;
try
{
accesstodata = new OleDbConnection(anbindung);
}
catch
{
MessageBox.Show("Fehler beim anbinden der Datenbank!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try ------------------------------ Hier liegt Fehler -------------------------------
{
OleDbCommand anbindungcom = new OleDbCommand(select, accesstodata);
OleDbDataAdapter insertinto = new OleDbDataAdapter(anbindungcom);

accesstodata.Open();
insertinto.InsertCommand = new OleDbCommand(insertdata, accesstodata);
}
catch
{
MessageBox.Show("Fehler beim einfügen der Daten!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
accesstodata.Close();
}

Es funktioniert immer noch nicht, aber ich bekomme eine Fehlermeldung (Die Messagebox: Fehler beim einfügen der Daten!), da im Abschnitt (Habe ich gekennzeichnet) irgendetwas nicht stimmt.

Kann mir jemand helfen oder einen Programmcode reinkopieren der das gleiche macht, aber funktioniert?

mfg
 
dein catch block.... wie konntest du dein programm so kompilieren lassen?

normalerweise musst du entweder
Code:
catch(Exception e)
{
    Messagebox.Show(e.Message);
    Messagebox.Show(e.StackTrace);
}

Des anderen sehe noch.... du hast deinen OleDbCommand initialisiert ohne eine Verbindung zu der Datenbank selbst zu öffnen. Ich glaube dass dort dein haupproblem liegt.
 
kann mich roker nur anschließen, du machts kein update der tabelle, sprich in deinem fall das insert. Wenn du nur Daten über ne einfche GUI entgegennimmst kannst du dir auch überlegen diese in einem einfachen InsertStatement zusammenzubaseln. dafür brauchst du keinen adapter. Also einfach sowas inder art, keine ahnung ob die syntax jetzt stimmt, hab schon ewig kein c# mehr gemacht:
Code:
OleDbCommand insert = new OleDbCommand(insertString, connection);
insert.executeNonQuery();

Um an deinem Beispiel mal weiter zu suchen warum es nicht geht, wäre es noch gut, wenn der Fehler der erzeugt wird noch angezeigt wird also ungefähr sowas:
Code:
try
{
    ...
}
catch (Exception e)
{
    MessageBox.Show(e.Message());
}

Naja ichhoffe das hilft ein bisschen. Wie gesagt hab schon lange nichts mehr gemacht mit c#.

Gruß
 
naja der adapter ist nur hilfreich wenn man die daten wiedergeben will. sonst macht es wirklich nur wenig sinn.
 
Ich bekomme nun eine Meldung, dass das Datenbankformat nicht erkennbar wäre.

Edit

Problem gelöst: Provider geändert
Ergänzung ()

OK vielen Dank an alle, das Problem wurde gelöst durch die Anweisungen von ICH_BIN_LETZTER!

Danke

mfg
 
Zuletzt bearbeitet:
Zurück
Oben