Sollte ich SqlDataReader innerhalb einer "using" -Anweisung verwenden?
Welche der beiden folgenden Beispiele sind korrekt? (Oder welches ist besser und sollte ich verwenden)
In der MSDN fand ich dies:
private static void ReadOrderData(string connectionString)
{
string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;"
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
//Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
}
//Call Close when done reading.
reader.Close();
}
}
Jedoch suchen andere Seiten einige Nutzer empfehlen, es zu tun auf diese Weise:
private static void ReadOrderData(string connectionString)
{
string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(queryString, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
//Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
}
}
}
}
}
So, die Frage ist: sollte ich das using
- Anweisung auch in der SqlCommand
und in der SqlDataReader
oder Sie werden automatisch entsorgt am Ende der SqlConnection
using
code-block.
InformationsquelleAutor der Frage Keoki | 2013-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die zweite option bedeutet, dass Ihre
reader
geschlossen werden, in dem Falle eine Ausnahme, nachdem es erstellt wurde, so ist es bevorzugt.Es ist effektiv verwandelt sich durch den compiler:
Sehen MSDN für mehr info.
InformationsquelleAutor der Antwort Daniel Kelley
Können Sie tatsächlich die Liste aufzuhalten der Benutzung zusammen, a la:
InformationsquelleAutor der Antwort BinaryTox1n
Wäre es nicht einfacher, um diesen code zu verwenden?
Diese entsorgen sollte der Leser, und die implizite Verbindung und Befehl, wenn die Nutzung beendet ist.
Oder habe ich etwas verpasst?
InformationsquelleAutor der Antwort SimonA