Søg på DotNyt:

tirsdag den 27. marts 2007

Luk en databaseforbindelse med using

skrevet af Niels Brinch

Et hurtigt tip: Man kan lukke sin databaseforbindelse ved hjælp af using. Man behøver ikke lave den klassiske try, catch, finally. Man kan gøre sådan:

SqlConnection conn = DB.GetConnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT .... osv.";
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
  while (reader.Read())
  {
    // læs data fra readeren med reader.GetString(0) osv.
  }
}

MEN! Tro ikke det betyder man kan gøre sådan:

conn.Open();
using (conn)
{
  conn.ExecuteNonQuery();
}

Når ovenstående er udført vil din connection stadig være åben! Luk den explicit med conn.Close() i en finally, sådan:

SqlConnection conn = new SqlConnection(connStr);

try
{
  SqlCommand cmd = new SqlCommand();
  cmd.Connection = conn;
  cmd.CommandText = "INSERT INTO osv....";
  conn.Open();
  using (conn)
  {
    cmd.ExecuteNonQuery();
  }
}
finally
{
  if (conn != null)
  {
    conn.Close();
  }
}

Jeg taler af bitter erfaring ...

2 kommentarer

2 Kommentarer:

At 27. mar. 2007 18.00, Blogger SuperZapper skrev...

Helt sikkert en god ting at bruge, da det kan gøre koden pænere idet man sparer hele sin try/catch/finally i nogen tilfælde.
Faktisk kan alle objekter der implementerer IDisposable lukkes på denne måde.

Et andet "using" trick er at man kan bruge det til at give namespaces et alias som her:

using MitAlias = Det.Her.Er.Et.Langt.Namespace;

 
At 4. apr. 2007 11.41, Blogger Niels Brinch skrev...

Hold da op det er smart! Og ukendt af de fleste. Det giver street-credit :p

Det fordrer da en selvstændig artikel, gør det ikke?

 

Send en kommentar

<< Tilbage


 
Til forsiden

Niels Brinch