¿Alguien sabe si el método SqlDataAdapter.Dispose realmente cierra o elimina cualquier SqlConnections? Cargué Reflector y veo que SqlDataAdapter hereda de DbDataAdapter. Si desensamblo y miro el método de disposición en esa clase, parece que no hay disposición de ninguna SqlConnections. Supongo que podría escribir una prueba para esto, pero pensé que pediría ver si alguien tenía alguna idea sobre esto.¿SqlDataAdapter.Dispose en realidad cierra una SqlConnection asociada?
Respuesta
Lo primero a tener en cuenta es que el DataAdapter administra y cierra su conexión en algunas circunstancias. Por ejemplo, si está usando un DataAdapter, probablemente esté operando en DataTables/DataSets usando las funciones .Fill() y .Update().
Desde el .Fill() docs:
El objeto de conexión asociado con la instrucción SELECT debe ser válido, pero no tiene que estar abierto. Si la conexión se cierra antes de que se llame a Fill, se abre para recuperar datos, luego se cierra. Si la conexión está abierta antes de que se llame a Fill, permanece abierta.
El .Update() docs no menciona nada sobre la conexión en absoluto, por lo que esperaría tener que administrarlo manualmente.
Ahora ha preguntado específicamente sobre el método Dispose(). Al igual que Update, el Dispose() docs no menciona específicamente la conexión, por lo que esperaría tener que cerrarla manualmente.
Por último, podemos mejorar el código de Bob King poco como esto:
Using conn as New SqlConnection(""), _
adapter as New SqlDataAdapter() With {.Connection = conn}
'Do stuff
End Using
O en C#:
using (SqlConnection conn = new SqlConnection(""))
using (SqlDataAdapter adapter = new SqlDataAdapter() {Connection = conn})
{
// Do stuff
}
No es 100% me dio la sintaxis de inicialización para el adaptador correcto, pero mecanografiado directamente en la ventana de respuesta. Lo arreglaré más tarde si es necesario.
No, no elimina la conexión. Yo creo que no debería. Es posible que desee usarlo en otro lugar.
Por lo que sé, no es así. Yo uso anidado Uso de declaraciones para lograr esto, crear la conexión en primer lugar, a continuación, crear el adaptador y, como los que usan declaraciones "pop", se dispone el adaptador, la conexión está dispuesto, que hace gatillo de su fin:
Using conn as New SqlConnection("")
Using adapter as New SqlDataAdapter() With {.Connection = conn}
'Do stuff'
End Using
End Using
La sintaxis es prácticamente idéntica para C#, si ese es el idioma de su elección.
- 1. ¿Se cierra automáticamente una SqlConnection cuando se cierra una aplicación?
- 2. .net SqlConnection no se cierra incluso dentro de un uso {}
- 3. ¿SqlDataAdapter cierra la función SqlConnection después de Fill()?
- 4. SqlConnection
- 5. Shared SqlConnection
- 6. IdbConnection vs. SqlConnection
- 7. sqlconnection no está definido
- 8. C# SQLConnection agrupación
- 9. "abrir/cerrar" SqlConnection o mantener abierto?
- 10. ¿Está asociada una aplicación con una extensión determinada?
- 11. ¿qué hace -arrayWithArray en realidad?
- 12. ¿Existe Java Kernel en realidad?
- 13. ¿Qué hace CascadeType.REFRESH en realidad?
- 14. ¿DataAdapter.Fill() cierra su conexión cuando se lanza una excepción?
- 15. Realidad Aumentada en Teléfonos Móviles
- 16. ¿Existe una SqlConnection existente que pueda usar en LinqPad?
- 17. ¿Hay alguna manera de detectar lectores abiertos en una SqlConnection?
- 18. ¿Qué hace ImageSwitcher en realidad?
- 19. Cómo funciona Eventbug en realidad
- 20. ¿Qué significa "dinámico" en realidad?
- 21. sobrecarga de crear nuevo SqlConnection en C#
- 22. SQLCommand/SQLConnection vs OleDbCommand/OleDbConnection
- 23. Cierre SqlConnection y SqlCommand C#
- 24. .Net: ¿Mi conexión se cierra mediante Dispose en este ejemplo?
- 25. C# DbConnection echó a SqlConnection
- 26. ¿Se eliminará SqlConnection por GC?
- 27. SqlConnection en C# - práctica de programación segura
- 28. Reutilización de SqlConnection y SqlDataReader
- 29. Una aplicación simple de realidad aumentada en C#
- 30. Rieles: ¿Qué significa en realidad "renderizar una plantilla"
Hmm, Joel, nunca he dicho que pueda declarar varios ID identificables en la misma declaración de uso. ¡Eso es bastante astuto! –
Además, creo que la versión de C# de los inicializadores de objetos no usa un "." http://weblogs.asp.net/dwahlin/archive/2007/09/09/c-3-0-features-object-initializers.aspx –