SQL-Datenbank updaten



  • Hallo zusammen.
    Vielleicht kann mir jemand helfen. Ich habe mit dem SQL-Manager eine Datenbank(Adressen) erzeugt und eine Tabelle(tblDaten) mit 2 Spalten(Vorname,Nachname) angelegt. Dann habe ich noch ein paar Zeilen in C# geschrieben, damit ich die Daten in einem Formular in Textfeldern sehen kann. Über zwei Buttons kann man nun in der Tabelle vor und zurück blättern (geht super). Jetzt das Problem: Wenn ich in einem Textfeld den Inhalt ändere und den Button Speichern betätige sollen die Inhalte in der Datenbank geändert werden. Mit dem unten geschrieben Code funzt das aber irgendwie nicht. Was mache ich falsch?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;

    namespace WindowsApplication1
    {
    public partial class Form1 : Form
    {
    DataSet objDS = new DataSet("Tabelle");
    SqlDataAdapter objCmd;

    public Form1()
    {
    InitializeComponent();
    String strConn = "Initial Catalog=Adressen;Data Source=localhost;User ID=sa";
    SqlConnection objConn = new SqlConnection(strConn);
    objCmd = new SqlDataAdapter("SELECT * FROM tblDaten", objConn);
    objCmd.Fill(objDS, "Tabelle");
    SqlCommandBuilder objBuilder = new SqlCommandBuilder(objCmd);

    textbox1.DataBindings.Add("Text", objDS, "Tabelle.Vorname");
    textbox2.DataBindings.Add("Text", objDS, "Tabelle.Nachname");
    }

    private void Vor_Click(object sender, EventArgs e)
    {
    this.BindingContext[objDS, "Tabelle"].Position += 1;
    }

    private void Zurück_Click(object sender, EventArgs e)
    {
    this.BindingContext[objDS, "Tabelle"].Position -= 1;
    }

    private void Speichern_Click(object sender, EventArgs e)
    {
    this.BindingContext[objDS, "Tabelle"].EndCurrentEdit();
    objCmd.Update(objDS,"Tabelle"); // <- hier bekomme ich die Fehlermeldung
    }
    }
    }

    Gruss Nico



  • 1. Bitte CodeTags nutzen
    2. Welche Fehlermeldung erhälst du?



  • Folgende Fehlermeldung:

    "Aktualisieren erfordert einen gültigen UpdateCommand, wenn eine DataRow-Auflistung mit modifizierten Zeilen weitergegeben wird."

    kommt aber nur, wenn man den Inhalt in einer Textbox geändert hat, sonst nicht.

    Gruss



  • private MySqlConnection conn = null;
        private MySqlDataAdapter adapt = null;
    
         conn = new MySqlConnection(ConnectionString);
            conn.Open();
            adapt = new MySqlDataAdapter(SELECTSQLQUERRY, conn);
    
          MySqlCommandBuilder builder = null;
    
                //MySqlCommandBuilder erzeugen  -> wichtig bei Update! 
                /*MySqlCommandBuilder assoziert mit MySqlDataAdapter und lauscht
                 * den OnRowUpdating events. Es generiert SQl-Commandos.
                */
                builder = new MySqlCommandBuilder(adapt);
                //Event für RowUpdated, um Fehler abzufangen
                adapt.RowUpdated += new MySqlRowUpdatedEventHandler(adapt_RowUpdated);
                //führt den Update mit DataTable (geänderte Daten) als Parameter.
                adapt.Update(T);
    
        private void adapt_RowUpdated(object sender, MySqlRowUpdatedEventArgs e)
        {
            //Tritt ein Fehler beim Updaten einer Zeile auf,
            //so soll diese nicht aktualisiert werden.
            //Update wird in der nächste Zeile fortgeführt -> SkipCurrentRow
            if (e.Status == UpdateStatus.ErrorsOccurred)
            {
                e.Status = UpdateStatus.SkipCurrentRow;
            }
        }
    

    Der Code ist nicht vollständig aber er sollte dir zeigen wie es geht.



  • Vielen Dank für die Hilfe. Gruss Nico


Anmelden zum Antworten