2015-06-16 2 views
1

Мне предоставлено веб-приложение, написанное в классическом ASP для переноса с Windows 2003 Server (SQL Server 2000 и IIS 6) на Windows 2008 Server (SQL Server 2008 и IIS 7.5) ,Классификация ASP global.asa Строка подключения SQL Server 2008

Сайт использует файл GLOBAL.ASA для определения глобальных переменных, одним из которых является строка подключения (cnn) для подключения к SQL Server.

Ниже (старый) Строка соединения с GLOBAL.ASA:

Sub Application_OnStart 
    Dim cnnDem, cnnString 
    Set cnnDem = Server.CreateObject("ADODB.Connection") 
    cnnDem.CommandTimeout = 60 
    cnnDem.Mode = admodeshareexclusive 
    cnnString = "Provider=SQLOLEDB; Data Source=192.xxx.x.xx; User Id=xxxx; Password=xxxxx; default catalog=xxxxxxx;" 
    Application("conString")=cnnString 
    Call cnnDem.Open(cnnString) 
    Application("cnn") = cnnDem 
End Sub 

В .ASP страницы затем использовать cnn значение, как это:

strSQL = "Select * From tblUtilities order by companyname" 
Set rs = Server.CreateObject("ADODB.Recordset") 
rs.Open strSQL, Application("cnn"), adOpenKeyset 

Однако я не мог получить строку подключения для подключения - Я отключил его до сообщения об ошибке «Ошибка для входа» (независимо от того, какой идентификатор входа я попробовал).

Я отредактировал файл GLOBAL.ASA следующим образом, и он работает.

Sub Application_OnStart 
    Dim cnnDem, cnnString 
    Set cnnDem = Server.CreateObject("ADODB.Connection") 
    cnnDem.CommandTimeout = 60 
    cnnString = "Provider=SQLNCLI10.1;User Id=xxxx; Password=xxxxx;Initial Catalog=xxxxxxx;Data Source=xxxxxx\SQLEXPRESS;" 
    Application("conString")=cnnString 
    Application("cnn")=cnnString 
    Call cnnDem.Open(cnnString) 
End Sub 

Основное отличие состоит в том, что cnn теперь содержит строку соединения, в котором, как ранее cnn был объектом со ссылкой на ADOBD.Connection.

Вопрос, который у меня есть, - какое воздействие (если оно имеется) будет иметь место в приложении. Я провел базовое (локальное) тестирование, и на данный момент все выглядит нормально. Но мне интересно, могут ли быть проблемы с несколькими пользователями (или что-то подобное), которые могут возникнуть при повторном развертывании этого сайта.

+4

Из MSDN - [не кэшировать соединение в 'Application (или Session) '] (https://msdn.microsoft.com/en-us/library/bb727078.aspx#EXAA) - при любом объединении пула будет мало пользы. Вы можете сохранить строку соединения в состоянии приложения. – StuartLC

+0

Спасибо за это, Стюарт –

ответ

0

Я держу строку соединения в Global.asa, но создаю соединение в отдельной функции, загруженной по мере необходимости. Объект подключения приложения может не знать о временных проблемах с сетью, которые могут закрыть это соединение, а затем будущие попытки использовать соединение не будут успешными.

Надеюсь, что это имеет смысл.

0

Один из самого лучшего и простого способа подключения, чтобы создать строку подключения к базе данных, чтобы смять новый файл ASP в корневом каталоге или в другом месте, и включают в себя строку подключения в него:

//Global.asp//

<% 
Dim connectionString 
connectionString = "PROVIDER=SQLOLEDB;DATA SOURCE=YourSQLServer;UID=sa;PWD=*******;DATABASE=YourDataBase" 
%> 

Затем создайте оператор include в каждом файле, который вы хотите назвать этим соединением.

<!-- #include virtual="global.asp" --> 

Затем, когда вам нужно настроить ваш вызов соединения, просто используйте код для подключения к базе данных:

<% 
Set adoCon = Server.CreateObject("ADODB.Connection") 
adoCon.Open = ConnectionString 
Set rsReports = Server.CreateObject("ADODB.Recordset") 
strSQL = "Select * From Customers" 
rsReports.Open strSQL, adoCon 
%> 
Смежные вопросы