tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
1971
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    shel shel ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    5
    Hallo zusammen,

    habe in "Microsoft Visual C# 2008 Express Edition" ein DataGridView, in welchem ich Werte von einer MySQL-Datenbank (per ODBC) anzeigen lassen kann. Funktioniert. (siehe Code-Snippet unten...)

    Nun möchte ich in diesem Formular per btn_update(_Click) Änderungen, welche ich im DataGridView mache, in der Datenbank (MySQL) in der entsprechenden Tabelle updaten. Habe schon verschiedene Foren und Howtos durchstöbert aber konnte es leider noch nicht zum Laufen bringen. Habe daher den Code in "btn_update_Click" wieder deletet.

    Kann mir hier jemand weiterhelfen?

    Besten Dank

    shel



    ************************



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

    using System.Data.Common;
    using System.Data.Odbc;
    using System.Data.OleDb;
    using System.Data.ProviderBase;
    using System.Data.Sql;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;

    namespace dgv_Update
    {
    public partial class Form1 : Form
    {
    private System.Data.Odbc.OdbcCommand OdbcCom;
    private string ConStr;

    public Form1()
    {
    InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    ConStr = "DRIVER={MySQL ODBC 5.1 Driver};SERVER="
    + "127.0.0.1"
    + ";PORT="
    + "3306"
    + ";DATABASE="
    + "db_People"
    + ";UID="
    + "root"
    + ";PWD="
    + ""
    + ";OPTION=3";
    OdbcConnection Conn = new OdbcConnection(ConStr);
    Conn.Open();
    OdbcCom = Conn.CreateCommand();

    string SelectQuery = "SELECT * FROM tbl_Place";

    OdbcDataAdapter DA = new OdbcDataAdapter(SelectQuery, Conn);

    DataSet DS = new DataSet();

    DA.Fill(DS, "MyTable");

    BindingSource bindingSource1 = new BindingSource();
    bindingSource1.DataSource = DS.Tables[0];

    BindingNavigator bindingNavigator1 = new BindingNavigator();

    bindingNavigator1.BindingSource = bindingSource1;

    dataGridView1.DataSource = bindingSource1.DataSource;
    }

    private void btn_update_Click(object sender, EventArgs e)
    {
    //Code, um die gemachten Änderungen im DataGridView1 in der MySQL-Tabelle upzudaten
    }

    }
    }
     

  2. #2
    Avatar von mage
    mage mage ist offline Mitglied Platin
    Registriert seit
    May 2002
    Ort
    Berliner Speckgürtel
    Beiträge
    707
    Schau dir mal die Hilfe des OdbcDataAdapters an.
    Dieser hat noch drei Eigenschaften für InsertCommand, UpdateCommand und DeleteCommand.
    Dort kannst du die entsprechenden SQL Statments setzen.

    Anschliessend per OdbcDataAdapter.update die Daten zurück in die Datenbank schreiben.

    Das Dataset oder die Datatable verwaltet selbstständig die vorgenommenen Änderungen.
    Mit .GetChanges kannst du zum Beispiel die Änderungen manuell abrufen.
     
    Allen ist das Denken erlaubt, vielen bleibt es erspart. (Kurt Goetz)

  3. #3
    shel shel ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    5
    Hallo mage,

    besten Dank für deine Tipps.
    Habe nun den Code im btn_update(_Click) mit folgenden beiden Zeilen erweitert:

    bindingSource1.EndEdit();
    DA.Update(DS, "MyTable");

    Jedoch leider immer noch ohne Erfolg. Erhalte jedoch keine Syntaxfehler, das Programm kann aber die Änderungen im DataGridView einfach immer noch nicht in der Datenbank machen!

    Kannst du mir allenfalls nochmals bitte helfen.

    Besten Dank

    shel
     

  4. #4
    Avatar von mage
    mage mage ist offline Mitglied Platin
    Registriert seit
    May 2002
    Ort
    Berliner Speckgürtel
    Beiträge
    707
    Nur das Update aufzurufen reicht nicht aus.
    Das Programm muss auch wissen, wie es die Daten abgleichen kann.

    Dazu müssen die Commands-SQL Strings gesetzt werden, Da.InsertCommand, Da.UpdateCommand und DA.DeleteCommand.

    Ggf. reicht es aus diese automatisch erzeugen zu lassen.
    Hierbei ist es aber zwinged erforderlich, dass die Spaltebezeichnungen mit der in der DB Übereinstimmen.

    OleDbCommandBuilder builder = new OleDbCommandBuilder(DA);
     
    Allen ist das Denken erlaubt, vielen bleibt es erspart. (Kurt Goetz)

  5. #5
    shel shel ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    5
    Hallo mage,

    habe deine Code-Teile versucht in meinem Code einzubauen. Jedoch leider immer noch ohne Erfolg. Syntax-Fehler, fehlende Parameter, ...

    Kannst du bitte deine gemachten Angaben direkt in meinem (gesamten) Code einbauen. So müsste es dann funktionieren. Denn ich weiss auch nicht genau, wo ich deine Code-Teile in meinem Projekt exakt einbauen muss?

    Besten Dank

    shel
     

  6. #6
    Avatar von mage
    mage mage ist offline Mitglied Platin
    Registriert seit
    May 2002
    Ort
    Berliner Speckgürtel
    Beiträge
    707
    Schau dir mal den Artikel an Punkt 4:
    http://code-inside.de/blog/2007/11/2...gen-net-mysql/
     
    Allen ist das Denken erlaubt, vielen bleibt es erspart. (Kurt Goetz)

  7. #7
    shel shel ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    5
    Hallo mage,

    diese Site habe ich schon mehrmals besucht und ausgetestet.

    Ich möchte nicht nur einen Record auf einmal updaten sondern alle gemachten Änderungen (also meistens mehrere Zeilen und Zellen) im DataGridView1 auf einmal in der Datenbank (Tabelle) ändern per btn_update.

    Kannst du mir hier nochmal bitte weiterhelfen.

    Gruss

    shel
     

  8. #8
    Avatar von mage
    mage mage ist offline Mitglied Platin
    Registriert seit
    May 2002
    Ort
    Berliner Speckgürtel
    Beiträge
    707
    Der DataAdapter geht beim Update alle Zeilen in der Datatable durch und prüft ob Änderungen vorgenommen wurden (row.RowState).
    Wurde eine Änderung festgestellt überträgt er diese in die Datenbank.
    Vorraussetzung dafür ist, er muss wissen wie die Änderungen zu übertragen sind.

    Es gibt drei Verschiedene Möglichkeiten:
    -Zeile ist Neu -> Zeile muss angefügt werden (Insert) -> benötigt DataAdapter.InsertCommand
    -Zeile wurde geändert -> Zeile muss aktualisiert werden (Update) -> benötigt DataAdapter.UpdateCommand
    - Zeile wurde gelöscht -> Zeile muss gelöscht werden (Delete) -> DataAdapter.DeleteCommand

    Damit der DataAdapter dies kann musst du die entsprechendend Commands setzen.

    In diesem Buchartikel ist alles ganz ausführlich erklärt:
    http://openbook.galileocomputing.de/...arp_29_002.htm
    Vielleicht hilft es dir für das Verständnis auch die vorhergehenden Kaptiel zu lesen.

    Leider kann ich dir nicht weiter helfen ohne deine Datanbankstruktur zu kennen, ausserdem kenne ich mich mit mysql leidig wenig aus, da ich mit dem MS Sql Server arbeite. Die Konzepte sind aber recht ähnlich.
     
    Allen ist das Denken erlaubt, vielen bleibt es erspart. (Kurt Goetz)

  9. #9
    shel shel ist offline Rookie
    Registriert seit
    Oct 2009
    Beiträge
    5
    Hallo mage

    hier der SQL-Code, um zuerst die Datenbank und dann die Tabelle in MySQL zu erstellen:

    CREATE DATABASE 'db_People';
    USE 'db_People';

    CREATE TABLE 'tbl_Place' (
    'id_Place' INT(11) NOT NULL AUTO_INCREMENT,
    'NP' INT(11) NOT NULL,
    'Name_Place' VARCHAR(45) NOT NULL,
    PRIMARY KEY ('id_Place')
    );

    Wenn du mit dem den Code in btn_update(_Click) zusammenbringt, ist das ideal.

    Zwischenzeitlich werde ich deine Tipps im Buch Galileo-Computing studieren bzw. testen.

    Gruss

    shel
     

Ähnliche Themen

  1. [Mysql] Spalte updaten +1
    Von alex130 im Forum Relationale Datenbanksysteme
    Antworten: 18
    Letzter Beitrag: 02.05.07, 20:37
  2. 2 Formularfelder in MySQL updaten
    Von wallis im Forum PHP
    Antworten: 17
    Letzter Beitrag: 01.09.05, 00:59
  3. [MySql] Datenbank updaten
    Von Claas M im Forum PHP
    Antworten: 2
    Letzter Beitrag: 27.05.04, 19:15
  4. MYSQL eintrag Updaten
    Von BFreakout im Forum PHP
    Antworten: 5
    Letzter Beitrag: 26.05.04, 12:51
  5. MySQL-DB Einträge updaten
    Von christoph_hro im Forum PHP
    Antworten: 8
    Letzter Beitrag: 09.05.04, 13:25