¡Por favor ayuda!.net SqlConnection no se cierra incluso dentro de un uso {}
información de fondo
Tengo una aplicación de WPF que accede a una base de datos de SQL Server 2005. La base de datos se ejecuta localmente en la máquina en la que se ejecuta la aplicación.
Donde quiera que use el Linq DataContext utilizo una instrucción {} que utiliza, y paso el resultado de una función que devuelve un objeto SqlConnection que se ha abierto y ejecuta SqlCommand antes de volver al constructor DataContext. Es decir
// In the application code
using (DataContext db = new DataContext(GetConnection()))
{
... Code
}
donde getConnection se parece a esto (he despojado a cabo la 'pelusa' de la función para que sea más fácil de leer, pero no hay ninguna funcionalidad adicional que falta).
// Function which gets an opened connection which is given back to the DataContext constructor
public static System.Data.SqlClient.SqlConnection GetConnection()
{
System.Data.SqlClient.SqlConnection Conn = new System.Data.SqlClient.SqlConnection(/* The connection string */);
if (Conn != null)
{
try
{
Conn.Open();
}
catch (System.Data.SqlClient.SqlException SDSCSEx)
{
/* Error Handling */
}
using (System.Data.SqlClient.SqlCommand SetCmd = new System.Data.SqlClient.SqlCommand())
{
SetCmd.Connection = Conn;
SetCmd.CommandType = System.Data.CommandType.Text;
string CurrentUserID = System.String.Empty;
SetCmd.CommandText = "DECLARE @B VARBINARY(36); SET @B = CAST('" + CurrentUserID + "' AS VARBINARY(36)); SET CONTEXT_INFO @B";
try
{
SetCmd.ExecuteNonQuery();
}
catch (System.Exception)
{
/* Error Handling */
}
}
return Conn;
}
no creo que ser un uno WPF la aplicación tiene alguna relación con el problema que estoy teniendo.
El problema que estoy teniendo
A pesar de la SqlConnection estando dispuesta junto con el DataContext en SQL Server Management Studio Todavía puedo ver un montón de conexiones abiertas con:
status : 'Sleeping'
command : 'AWAITING COMMAND'
last SQL Transact Command Batch : DECLARE @B VARBINARY(36); SET @B = CAST('GUID' AS VARBINARY(36)); SET CONTEXT_INFO @B
Finalmente la conexión el grupo se agota y la aplicación no puede continuar.
Así que solo puedo concluir que de alguna manera ejecutar SQLCommand para configurar Context_Info significa que la conexión no se elimina cuando se elimina el DataContext.
¿Alguien puede detectar algo obvio que impida que las conexiones se cierren y eliminen cuando se eliminan los DataContext para los que se utilizan?
Puede simplemente agregar una clase parcial para ampliar el contexto de datos autogenerado; no hay necesidad de subclase. –