Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C#: Insert in AccessDB

Empfohlene Antworten

Hi,

ich spiele gerade (mal wieder) mit C# und Access rum (bin absoluter Anfänger was C# betrifft). System ist Visual Studio.net Beta unter Win XP SP1. Die AccessDB ist mit Access2000 erstellt.

In der DB ist nur eine Tabelle "Kunden" mit den Feldern ID (Autowert, Primärschlüssel), Vorname (Text) und Nachname (Text).

Ich habe eine WindowsForm (als dll) mit 2 Textfeldern für Vor- und Nachname und einen Button "Speichern".

Dann habe ich eine Klasse "Kunden" erstellt mit folgendem Quelltext:


public class Kunden

{

	public string Vorname;


	public string Nachname;


	public bool Speichern()

	{

		string commandString="Select id, Vorname, Nachname from Kunden;";

		string connectionString="provider=Microsoft.JET.OLEDB.4.0; data source=Kunden.mdb"; 


		OleDbDataAdapter myDataAdapter=new OleDbDataAdapter(commandString,connectionString);

		DataSet myDataSet = new DataSet();


		myDataAdapter.Fill(myDataSet,"Kunden");


		DataTable Tabelle=myDataSet.Tables["Kunden"];


		DataRow neuerSatz=Tabelle.NewRow();

		neuerSatz["Vorname"]=this.Vorname;

		neuerSatz["Nachname"]=this.Nachname;

		Tabelle.Rows.Add(neuerSatz);


		myDataSet.AcceptChanges();

		myDataAdapter.Update(myDataSet,"Kunden");


		return true;

	}

}

Beim Klick-Ereignis des Speichern-Button wird eine Instanz der Klasse erstellt, die Variablen Vorname und Nachname mit dem Inhalt der Textfelder gefüllt und Speichern() aufgerufen. Die Werte in "this.Vorname" und "this.Nachname" haben die gewünschten Werte (hatte einen Haltepunkt gesetzt und Werte überprüft).

Der Compiler gibt keine Fehlermeldung aus, aber die Werte werden nicht in die DB geschrieben. Die DB ist auch im richtigen Verzeichnis, bei einer anderen WindowsForm mit einem DataGrid werden die vorhandenen Datensätze angezeigt.

Laut dem Tutorial, das ich verwende sollte es eigentlich so stimmen. Vielleicht hat ja einer von euch eine Idee, warum die Datensätze nicht in die Accesstabelle geschrieben werden.

Hallo Wolle,

vielleicht nur ein paar mögliche Fehlerquellen, die sein könnten:

(1) Steht die OLE - Verbindung ? Kann man irgendetwas aus der ACCESS - Tabelle lesen?

(2) Ist Tabelle mit Werte gefült?

(3) (glaube entscheidend) :

Die Zeile :

myDataAdapter.Fill(myDataSet,"Kunden");
erst nach ausgefüllter Tabelle füllen lassen, also nach :
myDataSet.AcceptChanges();

Vielleicht klapps irgendwas.

Danke schon mal für deine Antwort :)

Originally posted by Der Kleine

(1) Steht die OLE - Verbindung ? Kann man irgendetwas aus der ACCESS - Tabelle lesen?

Ja, das klappt. Auf einer anderen Form fülle ich ein Datagrid mit den gleichen Verbindungsdaten. Der Quelltext ist da bis einschliesslich "myDataAdapter.Fill(myDataSet,"Kunden");" gleich, nur das danach eben die Daten in das DataGrid geschrieben werden.

Originally posted by Der Kleine

(2) Ist Tabelle mit Werte gefült?

Sollte eigentlich, zumindest wird bei einem Haltepunkt als Wert "System.Data.Datatable" und nicht NULL ausgegeben. Ausgeben kann ich da nichts (zumindest weiß ich nicht wie) da ich ja in einer Klasse und nicht in einer Form bin.

Originally posted by Der Kleine

(3) (glaube entscheidend) :

Die Zeile :

myDataAdapter.Fill(myDataSet,"Kunden");
erst nach ausgefüllter Tabelle füllen lassen, also nach :
myDataSet.AcceptChanges();
Leider auch nicht. "myDataAdapter.Fill...." liest die vorhandenen Daten aus der DB und schreibt sie in das DataSet und soweit geht es ja auch. "myDataSet.AcceptChanges()" bringt das DataSet dazu die Daten die nachträglich in das Dataset eingefügt wurden zu "Akzeptieren":
DataRow neuerSatz=Tabelle.NewRow();

		neuerSatz["Vorname"]=this.Vorname;

		neuerSatz["Nachname"]=this.Nachname;

		Tabelle.Rows.Add(neuerSatz);

Ich habs aber auch gerade ausprobiert, genau gleiches Ergebnis: Keine Fehlermeldung, aber auch keine Datensätze in der Datenbank.

Originally posted by Wolle

Danke schon mal für deine Antwort :)

:)

Originally posted by Wolle

Ausgeben kann ich da nichts (zumindest weiß ich nicht wie) da ich ja in einer Klasse und nicht in einer Form bin.

Also in [OT] Delphi [/OT] würde ich nen

Showmessage(Tabelle.cells(tabelle.colcount-1,0)+' : '+Tabelle.cells(tabelle.colcount-1,0));

- Befehl nutzen, ohne Formular.

Weil wenn klappt, happerts an der vorletzten oder letzten Zeile.

Originally posted by Der Kleine

Also in [OT] Delphi [/OT] würde ich nen

Showmessage(Tabelle.cells(tabelle.colcount-1,0)+' : '+Tabelle.cells(tabelle.colcount-1,0));

- Befehl nutzen, ohne Formular.

Stimmt auch wieder, auf die Idee bin ich gar nicht gekommen. :rolleyes:

Muß da nur erstmal suchen in welcher Klasse das wieder drinsteckt und was ich für einen Verweis setzten muß. Auf die schnelle hab ich das in der MSDN nur für VB.NET gefunden. Werd ich morgen abend mal probieren, für heute reichts mir ;)

Originally posted by Der Kleine

(2) Ist Tabelle mit Werte gefült?

Ich hab da noch mal rumprobiert. Die Ausgabe habe ich zwar nicht hinbekommen, da auf einzelne Zellen kein direkter Zugiff ist. Um da Werte rauszubekommen muß man laut der Fehlermeldung mit einem Indexer arbeiten, allerdings hab ich noch nicht wirklich Ahnung wie man damit arbeitet (ich vermute mal, das das eine Art Array ist). :rolleyes:

In dem Objekt "Tabelle" ist aber definitiv Inhalt. Wenn ich dem Objekt eine nicht vorhandenen Tabelle zuordne bekomme ich als Inhalt NULL zurück, mit der vorhandenen Tabelle eben "System.Data.Datatable".

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.