Proszę pomóc!. Połączenie SqlConnection nie jest zamykane, nawet jeśli używasz {}
informacji Tło
Mam aplikacji WPF, który uzyskuje dostęp do bazy danych SQL Server 2005. Baza danych działa lokalnie na komputerze, na którym działa aplikacja.
Wszędzie Używam DataContext Linq Używam instrukcji {} i używam funkcji, która zwraca obiekt SqlConnection, który został otwarty i wykonał SqlCommand używając go przed powrotem do konstruktora DataContext. To znaczy
// In the application code
using (DataContext db = new DataContext(GetConnection()))
{
... Code
}
gdzie getConnection wygląda następująco (mam odpędza się z „puch” z funkcji, aby uczynić go bardziej czytelnym, ale nie ma żadnych dodatkowych funkcji, której brakuje).
// 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;
}
Nie sądzę, że wniosek jest jeden WPF ma żadnego wpływu na ten temat mam.
Problem mam
pomimo SqlConnection jest umieszczony wraz z DataContext w studiu SQL Server Management Wciąż widzę mnóstwo otwartych połączeń z:
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
ostatecznie przyłącza basen zostaje zużyty, a aplikacja nie może kontynuować.
Tak więc mogę tylko stwierdzić, że w jakiś sposób uruchamianie polecenia SQLC do ustawienia Context_Info oznacza, że połączenie nie zostanie usunięte, gdy DataContext zostanie usunięty.
Czy ktoś zauważy coś oczywistego, co powstrzymałoby połączenie przed zamknięciem i usunięciem, gdy DataContext, z którego są używane, zostanie usunięte?
Możesz po prostu dodać częściową klasę, aby rozszerzyć automatycznie wygenerowany kontekst danych; nie ma potrzeby tworzenia podklasy. –