ejemplos ejemplo c# sqlconnection sqlcommand using-statement

ejemplos - sqlconnection c# ejemplo



SqlCommand con el uso de la declaraciĆ³n (2)

Vi que en la mayoría de las muestras se utilizó SqlCommand de esta manera

using (SqlConnection con = new SqlConnection(CNN_STRING)) { using (SqlCommand cmd = new SqlCommand("Select ID,Name From Person", con)) { SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); return ds; } }

Sé por qué estamos usando la declaración "utilizando". Pero SqlCommand no incluye el método Close (), por lo que deberíamos usarlo dentro de la declaración


Porque también implementa IDisposable .

El propósito de la declaración de uso es que cuando el control llegue al final de su uso eliminará ese objeto de usar el bloqueo y liberar memoria. su propósito no es solo para el cierre automático de la conexión, básicamente eliminará el objeto de conexión y, obviamente, la conexión también se cerrará debido a este.

Su propósito es liberar los recursos que usamos dentro de la declaración Using.

Según IDisposable

Como regla general, cuando utiliza un objeto IDisposable , debe declararlo y crear una instancia en una instrucción using. La declaración de uso llama al método Dispose sobre el objeto de la manera correcta, y (cuando lo usa como se muestra anteriormente) también hace que el objeto salga del ámbito tan pronto como se llame a Dispose . Dentro del bloque que usa, el objeto es de solo lectura y no se puede modificar ni reasignar.

La declaración de uso garantiza que se llame a Dispose incluso si se produce una excepción mientras llama a los métodos en el objeto. Puede lograr el mismo resultado colocando el objeto dentro de un bloque de prueba y luego llamando a Dispose en un bloque final; de hecho, así es como el compilador traduce la instrucción using. El ejemplo de código anterior se expande al siguiente código en tiempo de compilación (tenga en cuenta las llaves adicionales para crear el alcance limitado del objeto):

NOTA:

Puede crear una instancia del objeto de recurso y luego pasar la variable a la instrucción using, pero esto no es una buena práctica. En este caso, el objeto permanece dentro del alcance después de que el control abandone el bloque de uso, aunque probablemente ya no tendrá acceso a sus recursos no administrados. En otras palabras, ya no estará completamente inicializado. Si intenta utilizar el objeto fuera del bloque de uso, corre el riesgo de que se produzca una excepción. Por esta razón, generalmente es mejor crear una instancia del objeto en la declaración de uso y limitar su alcance al bloque de uso.


SqlCommand implementa IDisposable que una instrucción using llamará .Dispose() antes de que finalice el bloque using. No estoy seguro de qué hace SqlCommand.Dispose() , pero es una buena idea llamar a .Dispose() en una instancia con la que haya terminado, es decir, tal vez se .Dispose() la conexión de la base de datos.