DataGrid und SQL-Update

billyblue

Grünschnabel
Hi!
Folgendes Problem: Ich hab mit Access eine Datenbank angelegt und lasse nun in diese einen Wert schreiben, sobald Button1 geklickt wurde:

---
ds1.Table1.AddTable1Row("bla bla bla");

oleDbDataAdapter1.Update(ds1);
---

So, die Daten werden nun in einem DataGrid angezeigt, funktioniert alles super - doch sobald ich das Programm schließe und neustarte, ist das DataGrid wieder vollkommen leer - anfangs dachte ich, die Daten werden gar nicht in das File geschrieben, aber unter Access werden alle Werte angezeigt. Jemand eine Idee, wieso es nach Programmstart nicht im Grid auftaucht?
Danke!
- bb
 
Hmm und in der Access DB steht der neue Wert drin?
Zeig mal das auslesen der Datenbank und das speichern in das DataSet!
 
Die Daten sind unter Access sichtbar? Dann scheint das Speichern zu funktionieren.

Wie schon der Vorposter erwähnt: zeig mal das Befüllen des DataGrids, hier scheint es ein Problem zu geben.
 
Code:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication4
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
		private System.Data.OleDb.OleDbConnection oleDbConnection1;
		private WindowsApplication4.DS ds1;
		private System.Windows.Forms.DataGrid dataGrid1;
		private System.Windows.Forms.Button button1;
		private System.Data.OleDb.OleDbCommand oleDbSelectCommand1;
		private System.Data.OleDb.OleDbCommand oleDbInsertCommand1;
		private System.Data.OleDb.OleDbCommand oleDbUpdateCommand1;
		private System.Data.OleDb.OleDbCommand oleDbDeleteCommand1;
		private System.Data.DataView dataView1;
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter();
			this.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
			this.ds1 = new WindowsApplication4.DS();
			this.dataGrid1 = new System.Windows.Forms.DataGrid();
			this.button1 = new System.Windows.Forms.Button();
			this.oleDbSelectCommand1 = new System.Data.OleDb.OleDbCommand();
			this.oleDbInsertCommand1 = new System.Data.OleDb.OleDbCommand();
			this.oleDbUpdateCommand1 = new System.Data.OleDb.OleDbCommand();
			this.oleDbDeleteCommand1 = new System.Data.OleDb.OleDbCommand();
			this.dataView1 = new System.Data.DataView();
			((System.ComponentModel.ISupportInitialize)(this.ds1)).BeginInit();
			((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
			((System.ComponentModel.ISupportInitialize)(this.dataView1)).BeginInit();
			this.SuspendLayout();
			// 
			// oleDbDataAdapter1
			// 
			this.oleDbDataAdapter1.DeleteCommand = this.oleDbDeleteCommand1;
			this.oleDbDataAdapter1.InsertCommand = this.oleDbInsertCommand1;
			this.oleDbDataAdapter1.SelectCommand = this.oleDbSelectCommand1;
			this.oleDbDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
																										new System.Data.Common.DataTableMapping("Table", "Table1", new System.Data.Common.DataColumnMapping[] {
																																																				  new System.Data.Common.DataColumnMapping("Field1", "Field1"),
																																																				  new System.Data.Common.DataColumnMapping("ID", "ID")})});
			this.oleDbDataAdapter1.UpdateCommand = this.oleDbUpdateCommand1;
			// 
			// oleDbConnection1
			// 
			this.oleDbConnection1.ConnectionString = @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""db1.mdb"";Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
			// 
			// ds1
			// 
			this.ds1.DataSetName = "DS";
			this.ds1.Locale = new System.Globalization.CultureInfo("de-DE");
			// 
			// dataGrid1
			// 
			this.dataGrid1.DataMember = "";
			this.dataGrid1.DataSource = this.dataView1;
			this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
			this.dataGrid1.Location = new System.Drawing.Point(344, 168);
			this.dataGrid1.Name = "dataGrid1";
			this.dataGrid1.Size = new System.Drawing.Size(320, 248);
			this.dataGrid1.TabIndex = 0;
			// 
			// button1
			// 
			this.button1.Location = new System.Drawing.Point(24, 64);
			this.button1.Name = "button1";
			this.button1.TabIndex = 1;
			this.button1.Text = "button1";
			this.button1.Click += new System.EventHandler(this.button1_Click);
			// 
			// oleDbSelectCommand1
			// 
			this.oleDbSelectCommand1.CommandText = "SELECT Field1, ID FROM Table1";
			this.oleDbSelectCommand1.Connection = this.oleDbConnection1;
			// 
			// oleDbInsertCommand1
			// 
			this.oleDbInsertCommand1.CommandText = "INSERT INTO Table1(Field1) VALUES (?)";
			this.oleDbInsertCommand1.Connection = this.oleDbConnection1;
			this.oleDbInsertCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Field1", System.Data.OleDb.OleDbType.VarWChar, 50, "Field1"));
			// 
			// oleDbUpdateCommand1
			// 
			this.oleDbUpdateCommand1.CommandText = "UPDATE Table1 SET Field1 = ? WHERE (ID = ?) AND (Field1 = ? OR ? IS NULL AND Fiel" +
				"d1 IS NULL)";
			this.oleDbUpdateCommand1.Connection = this.oleDbConnection1;
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Field1", System.Data.OleDb.OleDbType.VarWChar, 50, "Field1"));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_ID", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "ID", System.Data.DataRowVersion.Original, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_Field1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "Field1", System.Data.DataRowVersion.Original, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_Field11", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "Field1", System.Data.DataRowVersion.Original, null));
			// 
			// oleDbDeleteCommand1
			// 
			this.oleDbDeleteCommand1.CommandText = "DELETE FROM Table1 WHERE (ID = ?) AND (Field1 = ? OR ? IS NULL AND Field1 IS NULL" +
				")";
			this.oleDbDeleteCommand1.Connection = this.oleDbConnection1;
			this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_ID", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "ID", System.Data.DataRowVersion.Original, null));
			this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_Field1", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "Field1", System.Data.DataRowVersion.Original, null));
			this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_Field11", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "Field1", System.Data.DataRowVersion.Original, null));
			// 
			// dataView1
			// 
			this.dataView1.Table = this.ds1.Table1;
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(704, 478);
			this.Controls.Add(this.button1);
			this.Controls.Add(this.dataGrid1);
			this.Name = "Form1";
			this.Text = "Form1";
			this.Load += new System.EventHandler(this.Form1_Load);
			((System.ComponentModel.ISupportInitialize)(this.ds1)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.dataView1)).EndInit();
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void Form1_Load(object sender, System.EventArgs e)
		{
			
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			ds1.Table1.AddTable1Row("BLABLABLA");

			oleDbDataAdapter1.Update(ds1);
			}
	}
}
 
Hallo billyblue,

wo in deinem Code hast du denn das DataSet aus dem DataAdapter gefüllt?
Normalerweise geht dies mit
Code:
oleDbDataAdapter1.Fill(ds1)
Wenn du das DataSet nicht irgendwie mit den Daten füllst, zeigt er verständlicherweise ein leeres DataSet an.
Da ich annehme, dass du den DataAdapter und das DataSet auf das Form gezogen hast (der Quelltext sieht zu größten Teil automatisch generiert aus), solltest du velleicht mal gucken, ob du die beiden Komponenten richtig verknüpft hast.

MfG
Gorcky
 
Hi ncoh mal,
die müssen ja richtig verknüpft sein - weil die Daten, die ich während der Luafzeit eintragen lasse werden auch angezeigt (im DataGrid)

Beispiel

ich starte das Programm, in der Tabelle sind schon 5 Einträge - diese werden NICHT im DataGrid angezeigt, sondern nur die beispielsweise 3 neuen Einträge, welche ich zur Laufzeit eintrage - somit sind dann insgesamt 8 in der Datei - sollte ich das Programm nun schließen und neustarten, so werden auch die nun insgesamt 8 Einträge NICHT angezeigt, sondern wiederum nur die jetzt zur Laufzeit Neuen.

Danke!
- bb
 
die müssen ja richtig verknüpft sein - weil die Daten, die ich während der Luafzeit eintragen lasse werden auch angezeigt (im DataGrid)
Ja, weil diese zur Laufzeit neu angelegten Daten in das DataSet geschrieben werden. Das DataSet und das DataGrid sind verbunden und somit zeigt er die Daten auch an.
Zum speichern sagst du
Code:
oleDbDataAdapter1.Update(ds1);
Daher werden deine Daten aus dem DataSet auch in die Datenbank geschrieben (auch ohne Verknüpfung der beiden Komponenten DataSet und DataAdapter).
Allerdings hast du das DataSet vorher scheinbar nicht mit den Daten aus der Datenbak gefüllt, da ich keine Zuweisung (wie ich sie vorhin beschrieben habe) finden kann.Das würde deinen Muster auch genau entsprechen.

MfG
Gorcky
 
Wie peinlich! Ja, daran lag es ;) Ich bin davon ausgegangen, dass das VisualStudio das von alleine beim Verbinden erzeugt. Vielen Dank!
 
Ich habe da auch ein kleines Problem, wenn ich (Ich benutze allerdings eine SQL Datenbank) mein Data Grid füllen möchte mit dem Befehl:

Code:
SqlDataAdapter.Fill(DataSet11.dertablename(0))

Sagt er mit, das "SqlDataAdapter" erst noch deklariert werden müsste!
Ich versteh Visual Basic .NET nicht.... VB 6 war so einfach :confused:

Bitte um Hilfe :-(

MFG:
Snipero2
 
Hallo Snipero,

wenn ich das richtig sehe, willst Du die Methode direkt von der Klasse aufrufen, also einen statischen Aufruf machen. Du musst aber stattdessen eine Instanz des DataAdapters machen und die Methode von dieser Instanz aufrufen.
Woher sollte die Methode wissen, WAS sie denn in dein DataSet füllen soll, wenn du es nicht vorher in der Instanz vorgibtst?...

Verstanden?
Wenn irgendwas unklar ist, guck Dir mal den Thread http://www.tutorials.de/forum/showthread.php?t=162074
bzw meinen darin geposteten Ahang an.

Wenn Du dan immer noch Frage haben solltest - einfach wieder melden. ;-)
 
Zurück