Autor Beitrag
pycak
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 22.01.09 18:42 
hallo zusammen,

wenn ich mit Connector/NET eine Verbindung zu MySQL aufbau

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
MySql.Data.MySqlClient.MySqlConnection conn;
string myConnectionString;

myConnectionString = "server=127.0.0.1;uid=root;" +
    "pwd=12345;database=test;";

try
{
    conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
    conn.Open();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
    MessageBox.Show(ex.Message);
}


wie lange hält die Verbindung???

wenn ich debugge und überprüfe ob conn.State == System.Data.ConnectionState.Open bekommen ich Verbindung open,
allerdings sobald die Methode verlassen wurde und ich erneut schaue ob die Verbindung steht b]conn.State == System.Data.ConnectionState.Open[/b] habe ich ich Verbindung closed.

Meine Frage: wird die Verbindung automatisch beendet oder wie funktioniert dass???
Ich dachte dass die Verbindung bestimmte Zeit geöfnet bleibt so dass ich die Verbindung beenden muss mit conn.close

Danke und Gruß
Pycak

Moderiert von user profile iconKha: Quote- durch C#-Tags ersetzt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 22.01.09 20:11 
Hallo,

bei Dir gibt es zweimal falsches Verständnis:

Unter ADO.NET ist das normale Verhalten, dass eine DbConnection erzeugt (new oder Create) und geöffnet (Open) wird, wenn sie gebraucht wird, und unmittelbar danach geschlossen (Close) und aufgelöst (Dispose) wird. Um das zu vereinfachen, wird empfohlen, das alles in einen using-Block einzuschließen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
using(DbConnection conn = new DbConnection(connString)) {
   using(DbCommand cmd = new DbCommand(conn)) {
      //  CommandText und Parameter hinzufügen
      conn.Open();
      cmd.ExecuteNonQuery();
   }
// Close und Dispose werden durch den using-Block automatisch ausgeführt

Damit das Öffnen und Schließen nicht zuviel Zeit verbraucht, benutzt NET ConnectionPooling. Du kannst Dich darauf verlassen, dass das vernünftig abläuft.

Dein zweites Problem ist der Geltungsbereich der Variablen conn:
Zitat:
allerdings sobald die Methode verlassen wurde

... dann ist diese Variable, also das damit verbundene Objekt futsch (also geschlossen und aufgelöst). Wegen des ConnectionPooling gibt es sie aber "intern" noch und kann schnell reaktiviert werden.

Das sollte es etwas klarer machen. Jürgen

PS. Code sollte nicht als "Zitat" markiert werden, sondern mit C# und den Plus-Button. Danke, Sebastian!