En su uso actual, se cerrará para usted:
Si el IDbConnection se cierra antes de relleno se llama, se abre para recuperar datos y luego se cierra. Si la conexión está abierta antes de que se llame a Fill, permanece abierto.
http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx
Creo que es siempre mejor para atender de manera explícita para usted mismo con una declaración using
:
using (SqlConnection conn = new SqlConnection(""))
{
conn.Open();
// Do Stuff.
} // Closes here on dispose.
Esto suele ser más fácil de leer y no se basa en la gente para entender el funcionamiento interno de SqlDataAdapter.Fill
, solo la declaración y las conexiones using
.
Sin embargo, si sabe la conexión se cierra antes de que el adaptador la use (como en, acaba de crear la conexión) y no se utiliza para nada más, su código es perfectamente seguro y válido.
En lo personal, me gustaría escribir algo como esto:
string cnStr = "Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm";
DataSet ds = new DataSet();
using (SqlConnection cn = new SqlConnection(cnStr))
using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn))
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
conn.Open();
adapter.Fill(ds);
}
pero si escribo este código sin necesidad de utilizar la construcción cn estado lo han cerrado antes de la salida de la función – Wachburn
@Wachburn de hecho, y la consulta de MSDN verifica esto. Lo siento, no capté esto la primera vez. –
Se encarga de cerrarlo por usted si el comando se ejecuta con éxito, pero ¿qué ocurre en un caso de excepción? (interbloqueo, tiempo de espera, etc.) –