iceget
Goto Top

C Sharp Datenbanksuch und Updatefrage

Hallo liebe Community,

und zwar habe ich folgende Frage:

ich bin beginner in C#.

Ich habe eine Konsolenanwendung erstellt, mit der ich eine AccessDatenbank mittels ODBC auslese,
und dann direkt in eine MySQL Datenbank schreibe.

Das funktioniert alles prima, nur würde ich gerne folgendes erreichen:

Wie kann ich das bewerkstelligen das er zuerst (bevor er in die MySQL Datenbank einen Eintrag macht) in der MySQL Datenbank nachschaut ob es diesen Eintrag schon gibt (anhand der einmaligen NR),
und erst dann die Daten von der Access Datenbank reinspielt?

So wie jetzt, befüllt er mir die Datenbank nach jeder Ausführung, ...


Könnt ihr mir helfen?

Eigentlich möchte ich die Access Datenbank mit der MySQL Datenbank syncen,
und anschließend immer nur über das Datum zurückverfolgen was geändert wurde,
das ich nicht immer alles syncen muss. Wenn was geändert wird, wird das Feld Datum auf das aktuelle Änderungsdatum geändert!

Vielen Dank!

glg Markus

Hier der Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Data.Odbc;
// benötigt für die MySql Datenbankanbindung
using MySql.Data.MySqlClient;

namespace SyncService
{
    class Program
    {
        static void Main(string args)
        {


            // MySQL Zugangsdaten
            string mysql_host = "xxx";  
            string mysql_datenbank = "xxx";  
            string mysql_benutzername = "xxx";  
            string mysql_passwort = "xxx";  

            // MySQL Datenbank Verbindungsstring
            string mysql_connect = "server=" + mysql_host + ";database=" + mysql_datenbank + ";uid=" + mysql_benutzername + ";password=" + mysql_passwort + ";";  

            // Definieren einer neuen MySQL-Verbindung
            MySqlConnection MySQLDbConnection = new MySqlConnection(mysql_connect);

            // MySQL Datenbankverbindungstest. Falls dieser fehlschlägt, wird das Programm beendet
            try
            {
                MySQLDbConnection.Open();
            }
            catch (MySqlException ex)
            {
                Console.WriteLine("connection to the MySQL Database '" + mysql_datenbank + "' failed.");  
                Console.WriteLine("The MySQL Database returned the following message");  
                Console.WriteLine(ex.Message);
                Thread.Sleep(5000);
                return;
            }

            // ODBC DSN Name (muss zuerst in Windows per System DSN hinzugefügt werden (Access Datenbank auswählen, System DSN Name zuweisen, fertig))
            string DSN = "xxx";  

            // Definieren einer neuen Access ODBC-Verbindung
            OdbcConnection AccessDbConnection = new OdbcConnection("DSN=" + DSN);  

            // Access Datenbankverbindungstest. Falls dieser fehlschlägt, wird das Programm beendet
            try
            {
                AccessDbConnection.Open();
            }
            catch (OdbcException ex)
            {
                Console.WriteLine("connection to the DSN '" + DSN + "' failed.");  
                Console.WriteLine("The OdbcConnection returned the following message");  
                Console.WriteLine(ex.Message);
                Thread.Sleep(5000);
                return;
            }

            OdbcCommand AccessDbCommand = AccessDbConnection.CreateCommand();
            AccessDbCommand.CommandText = "SELECT * FROM CLI ORDER BY NOME ASC";  
            OdbcDataReader AccessDbReader = AccessDbCommand.ExecuteReader();


            int id = 0;
            string ida = "";  
            // Ausgeben der Einträge der Tabelle CLI
            while (AccessDbReader.Read())
            {

                id++;

                // führende 0en
                if (id <= 10)
                {
                    ida = "0000";  
                }
                if (id >= 10)
                {
                    ida = "000";  
                }
                if (id >= 100)
                {
                    ida = "00";  
                }
                if (id >= 1000)
                {
                    ida = "0";  
                }

                // GetString(0) = Vertragsnummer
                String CODICE = AccessDbReader.GetString(0);
                
                // GetString(1) = Name
                String NOME = AccessDbReader.GetString(1);

                Console.WriteLine(ida + id + " | ");  


                MySqlCommand mysql_command_update = new MySqlCommand("INSERT INTO `" + mysql_datenbank + "`.`CLI` (`CODICE`,`NOME`) VALUES ('" + CODICE + "','" + NOME + "');", MySQLDbConnection);  
                mysql_command_update.ExecuteNonQuery();

            }
            Thread.Sleep(99999);

            AccessDbReader.Close();
            AccessDbCommand.Dispose();
            AccessDbConnection.Close();


        }
    }
}

[Edit] Latent vorhandenen Code durch so genannte "Code-Formatierung" sichtbar gemacht. Weil ich geduldig bin.... [/Edit]

Content-Key: 152669

Url: https://administrator.de/contentid/152669

Printed on: April 20, 2024 at 03:04 o'clock

Member: AhraLordNikon
AhraLordNikon Oct 09, 2010 at 10:40:02 (UTC)
Goto Top
Mal etwas plump ;) mach doch einfach erst eine select und schau ob du was zurückbekommst. Falls er nichts findet dann machst du den Insert oder hab ich dich falsch verstanden.
Member: Edi.Pfisterer
Edi.Pfisterer Oct 09, 2010 at 17:34:02 (UTC)
Goto Top
Hallo!
gebe AhraLordNikon recht, erst
' Pseudocode:  
select * from tbl_xy where id = x und 
if rs.eof then
    insert into ...
end if

Dein Code ist allerdings mangels Formatierung ziemlich schwer lesbar (ich will mich da gar nicht bemühen)...

mein Tipp:
eine entsprechende Formatierung mittels CODE (ich emfpehle die Formatierungshilfe) wird sicherlich mehr Kollegen für dieses Thema begeistern können face-wink

gutes gelingen
lg
Mitglied: 76109
76109 Oct 10, 2010 at 18:00:20 (UTC)
Goto Top
Hallo

Noch als kleine Anmerkung zu den führenden Nullen. Das geht auch einfacher:
Right("0000" + id, 5)

Gruß Dieter
Member: iceget
iceget Oct 12, 2010 at 23:10:28 (UTC)
Goto Top
DANKE!

ich habe dies nun so durchgeführt, so funktioniert es perfekt!

Vielen Dank!

glg Markus
Member: iceget
iceget Oct 12, 2010 at 23:11:01 (UTC)
Goto Top
Vielen Dank für diesen wirklich sehr hilfreichen Tipp (bin leider noch in der Anfangsphase von C#).

lg Markus