У меня проблема с кодовым битом в приложении ASP.NET Webforms 4.
Я использую SQL Server 2008 R2, IIS 7, веб-сайт работает на Windows Server 2008 R2 в отдельном пуле приложений (интегрированный режим, .NET4, с поддержкой 32-битных сборок).
Следующий код создает проблемы:
Dim sqlCmd = New SqlClient.SqlCommand
With sqlCmd
Using sqlConnectionToUse As SqlClient.SqlConnection = GetActiveConnexion(pstrConnectString), _
vAdaptor As New SqlClient.SqlDataAdapter
.Connection = sqlConnectionToUse
.CommandText = pstrSQL 'function parameter
vAdaptor.SelectCommand = sqlCmd
'query1: SELECT somecolumn FROM table WHERE somecolumn '' ==> opens a new connection in SQL Server
'query2: SELECT someothercolumn FROM anothertable WHERE someothercolumn 23 ==> uses my WebSite process active connection
vAdaptor.Fill(vDataSet)
End Using
End With
ОБНОВЛЕНИЕ: метод GetActiveConnexion () просто выполняет следующий код в моем случае:
Return New SqlClient.SqlConnection("my connection string obtained from the web.config file")
Когда я запускаю query2, все идет гладко, приложение ASP.NET использует открытое соединение пула приложений, и я получаю свои результаты в наборе данных.
Однако всякий раз, когда я запускаю запрос1, на SQL-сервере открывается НОВОЕ соединение (я вижу, что оно отображается в мониторе активности SSMS), и это остается открытым. Проблема в том, что если я выполню этот запрос1 100 раз, я достигну предела пула соединений и произойдут очень плохие вещи. Я все еще получаю результаты в наборе данных, могу использовать их и т.д ...
Новое соединение создается по вызову vAdaptator.Fill ().
Есть идеи, что случилось?
Большое спасибо за ваше время.
(PS: извините за плохой английский).
Вот код на C # для тех, кто предпочитает:
object sqlCmd = new SqlClient.SqlCommand();
using (SqlClient.SqlConnection sqlConnectionToUse = GetActiveConnexion(pstrConnectString)) {
using (SqlClient.SqlDataAdapter vAdaptor = new SqlClient.SqlDataAdapter()) {
sqlCmd.Connection = sqlConnectionToUse;
sqlCmd.CommandText = pstrSQL; //function parameter
vAdaptor.SelectCommand = sqlCmd;
//query1: SELECT F10_ID FROM FIN_MONTANT_TT_F10 WHERE F10_ID_TT_F19 = '' ==> opens a new connection in SQL Server
//query2: SELECT A48_ID FROM ADH_EPARTICIPANT_ADMIN_A48 WHERE A48_ID=23 ==> uses my WebSite process active connection
vAdaptor.Fill(vDataSet);
}
}