Søg på DotNyt:
Denne blog er flyttet til www.nielsbrinch.com


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. marts 2007 kl. 18.00, Blogger Christian H. Nielsen 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. april 2007 kl. 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