Laden...

C# <-> Mysql

Erstellt von stift vor 18 Jahren Letzter Beitrag vor 18 Jahren 7.571 Views
S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren
C# <-> Mysql

Hallo,

ich moechte von meinen C# Programm aus eine MySql-DB auslesen und Daten schreiben, ich habe schon im Internet und im Forum sehr viel gefunden und jetzt habe ich die Quwahl der Wahl, welche Methode soll ich nehmen.

Ich habe nur zwei Kritieren an die Methoden

  1. Sie soll im Programm implementiert sein (als keine extra installation von Driver usw.)
  2. Sie soll so leicht wie moeglich in mein Programm implementierbar sein

Ich hoffe, dass mir jemand helfen kann.

MfG

stift

N
4.644 Beiträge seit 2004
vor 18 Jahren

Oledb?
Odbc?

--> Bitte im richtigen Forum posten! Verschoben nach Datentechnologien.

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

--> Bitte im richtigen Forum posten! Verschoben nach Datentechnologien.

Sorry, ich habe es mir schon fast gedacht

Oledb?
Odbc?

????

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo Stift!

Also zur Erklärung:

OleDb und ODBC sind zwei "Treiber" für Datenbanken. Treiber ist zwar vielleicht das falsche Wort, aber eventuell verständlicher.

Während ODBC erst in Windows installiert werden muss, kann man mit Hilfe von OleDb direkt aus dem .NET Framework die Datenbank ansprechen.

Hierzu solltest du unbedingt in die Hilfe schauen. Unter System.Data.OleDb findest Dur eine Reihe von Datenbanken, die Du damit ansprechen kannst.

Wenn Du Dir das angeschaut hast, kannst Du vielleicht nochmal konkretere Fragen stellen, denn die Anwendung von OleDb ist nicht allzu schwierig.

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

also waere fuer mich oledb guenstiger, wenn ich auf eine MySql-DB zugreifen will.

Gibt es gute und einfache OleDb-Anelitungen?

N
4.644 Beiträge seit 2004
vor 18 Jahren

Ja, die SDK Doku. Da findest Du Beispiele.
Stichworte:
System.Data.OleDb.OleDbConnection
System.Data.OleDb.OleDbCommand
System.Data.OleDb.OleDbDataAdapter
System.Data.DataSet

Hier findest Du ConnectionStrings: http://www.connectionstrings.com/.

F
10.010 Beiträge seit 2004
vor 18 Jahren

Um mit OleDb auf die MySql Db zugreifen zu können, muss erst der
MySql-OleDb Treiber installiert werden.

Von .NET ist es einfacher mit dem MySql Connector.NET, den
es direkt bei MySql gibt.

Im Handbuch zu MySql ist die Benutzung im Kapitel 24.2 erklärt.

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

unter 24.2 steht nichts ueber c#, sondern nur ueber c

F
10.010 Beiträge seit 2004
vor 18 Jahren

http://dev.mysql.com/doc/refman/5.0/en/connector-net.html

Das ist das von mir genannte Kapitel.

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

Sorry, ich habe unter MySQL 5.1 Reference Manual geschaut.

F
10.010 Beiträge seit 2004
vor 18 Jahren

Ich habe unter MySql-Connector.Net doku geschaut 😉

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

Wer richtig sucht, der findet.

Sorry.

Eine andere frage der connector funktioniert bei mir bereits, aber wenn ich mich das erstemal mit dem Server verbinden will kommt die Meldung "Connection unexpectedly terminated" und wenn ich gleich danach mich nochmal verbinden will funktioniert es ohne Probleme.

Kenn jemand die Ursache dafuer?

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo Stift!

Ich würde blind tippen, dass es am Netzwerk liegt. Befinden sich DB und Dein .NET Programm auf einem Rechner? Dann könnte ich es mir allerdings nicht erklären.

Wenn dem aber nicht so ist, dann könnte es an einem Timeout liegen. Ich meine, dass es möglich sein kann, dass der Server nicht schnell genug antwortet. Beim zweiten mal, waren aber schon mal Anfragen da, und der Server antwortet Netzwerkbedingt dann automatisch schneller (Er muss kein Arp etc machen).

Was für eine Netzwerkverbindung hast Du denn (Router, Switches und Leitungsgeschwindigkeit) ?

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

Cleint/Server sind andere Rechner

Netzwerkt:

100MB Ethernet
Switch
Router

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

wie lautet eigentlich die Befehls reihenfolge zum einfuegen eines datensatzes in die DB.


connet
?
?
?
MySqlCommand("INSERT INTO t_table (feld) VALUES ('wert')");
?
?
?
close();

F
10.010 Beiträge seit 2004
vor 18 Jahren
D
155 Beiträge seit 2005
vor 18 Jahren

WEDER OLEDB NOCH ODBC!!!

Finger weg davon! Es gibt doch extra einen .NET Datenbanktreiber von MySQL!
Runterladen (www.mysql.com) und installieren. Schon hat man die Xtra aus MySQL angepassten Klassen.

F
10.010 Beiträge seit 2004
vor 18 Jahren

Über den reden wir doch schon die ganze Zeit.

D
155 Beiträge seit 2005
vor 18 Jahren

Ich bin vielleicht blöde:

"Erst lesen, dann schreiben"...

Oledb?
Odbc?

--> Bitte im richtigen Forum posten! Verschoben nach Datentechnologien.

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren
2.0

Hallo,

wann gibt es denn Connector fuer Framework 2.0.

Ich nutze 2.0 und wenn der 1.0 Connector den Server nicht findet schmiert das ganze Programm ab, oder hat das andere Ursachen?

F
10.010 Beiträge seit 2004
vor 18 Jahren

Ein Programm das abschmiert ist immer schlecht geschrieben.

Hast Du Try/Catch um die DB-Aktionen?

Was meinst Du überhaipt mit abschmieren?

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

ja, habe ich. Unter Framework 1.1 schmiert das/der (programm)teil bei gleichen bediengungen nicht ab.

F
10.010 Beiträge seit 2004
vor 18 Jahren

Was heisst Schmiert ab?

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

\************** Exception Text **************
System.Net.Sockets.SocketException: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde
   at System.Net.Sockets.Socket.Shutdown(SocketShutdown how)
   at MySql.Data.Common.SocketStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.BufferedStream.ReadByte()
   at MySql.Data.MySqlClient.PacketReader.ReadHeader()
   at MySql.Data.MySqlClient.PacketReader.OpenPacket()
   at MySql.Data.MySqlClient.NativeDriver.Open()
   at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionString settings)
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at TUS.fun_db.mysqlconnect()
   at TUS.Form_Main.btn_cheupd_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


\************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
MySql.Data
    Assembly Version: 1.0.6.36337
    Win32 Version: 1.0.6.36337
    CodeBase: file:///C:/Programme/test/MySql.Data.DLL
----------------------------------------
System.Data
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------

\************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.


F
10.010 Beiträge seit 2004
vor 18 Jahren

Und das lässt sich nicht durch Try/Catch um die Verbindungsanforderung abfangen?

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

Im Framework 2.0 nicht.

F
10.010 Beiträge seit 2004
vor 18 Jahren

Wie sieht denn dein Try/Catch aus?

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

try
{
        conn = new MySqlConnection(connStr);
        conn.Open();
        select();
}
catch(MySqlException ex)
{
        MessageBox.Show(ex.Message);
}

F
10.010 Beiträge seit 2004
vor 18 Jahren

Wenn Du Dir die Fehlermeldung ansiehst, wirst Du feststellen,
das eine SocketException geworfen wird.

Die fängst Du aber nicht ab.

Du solltest bei MySql aus verschiedenen Gründen nicht nur MySqlExceptions
sondern allgemeine Exceptions abfangen.
Kannst Du ja auch zusätzlich machen.


try
{
        conn = new MySqlConnection(connStr);
        conn.Open();
        select();
}
catch(MySqlException mysqlex)
{
        MessageBox.Show(mysqlex.Message);
} 
catch(Exception ex)
{
        MessageBox.Show(ex.Message);
} 
finally
{
  if( conn != null ) 
    conn.Close();
}

S
stift Themenstarter:in
201 Beiträge seit 2005
vor 18 Jahren

Danke fuer deine Hilfe. Es hat funktioniert.

906 Beiträge seit 2005
vor 18 Jahren

Es gibt den Connector 1.0.7 für MySQL, der auch .NET 2.0 unterstützt, Hast du dort immer noch probleme?