2015-08-10 3 views
0

В настоящее время у меня есть классический ASP-сайт, работающий на IIS6, и все работает хорошо. Файл «Include» используется для открытия соединения db. Затем соединение db сохраняется в переменной сеанса.Соединения DB в переменных сеанса после миграции из Win2k3 в Win2012 R2

Вот фрагмент нашего файла Include «dbinclude.asp»:

<% 
Set CN_sql = Server.CreateObject("ADODB.Connection") 
CN_sql.ConnectionString="DSN=sqldb;UID=testuid;PWD=testpwd;Server=testdb;Database=mydatabase" 
CN_sql.Open 
Session("Connection_sql") = CN_sql 
%> 

В классических страниц ASP, мы используем следующий код для подключения к БД, чтобы вытащить данные:

<html> 
<head> 
<!--#include file="./dbinclude.asp"--> 
</head> 
</body> 
<% 
    set ds = Server.CreateObject("ADODB.Recordset") 
    CN_sql = Session("Connection_sql") 
    ds.ActiveConnection = CN_sql 
    ds.CursorType = 0 

    SQL = "select * " 
    SQL = SQL & " from users " 

    ds.Source = SQL 
    ds.Open 

    IF ds.EOF then 
     response.write("SQL EOF. NO data found.<br/>") 
    ELSE 
     ds.MoveFirst 
     while not ds.EOF 
      response.write(ds.fields("user_name") & " <br/> ") 
      ds.MoveNext 
     wend  
    End If 
%> 
</body> 
</html> 

В IIS6 этот код отлично работает для всех страниц. Однако при тестировании в IIS8.5 (Win2012R2, а также IIS7, Win7), я получаю сообщение об ошибке:

Microsoft OLE DB Provider для драйверов ODBC ошибка '80004005' [Microsoft] [ODBC Driver Manager] источник данных не найден и драйвер по умолчанию не указано

номер строки, где ошибка указывает на эта линия:

ds.ActiveConnection = CN_sql 

пула приложений в IIS 8.5 установлен в .NET v2, позволяет 32 -битное приложение, классическая труба линия. Я пробовал различную комбинацию пула приложений (меняя на другую версию .NET, разрешаю/запрещаю 32-битное приложение, классический/интегрированный конвейер, изменил Identity, попробовал разные состояния сеанса).

В IIS 8.5, если я закомментируйте следующую строку в коде:
CN_sql = Session("Connection_sql")
будет решить эту проблему.
Однако, поскольку у нас есть большое количество страниц, переписывание и тестирование в настоящее время невозможно.

Есть ли что-то в Windows 2012, которое блокирует вас от хранения открытого подключения к базе данных в переменной сеанса? Я знаю, что это неэффективно, но переписывание в это время будет большим делом.

+0

Не положительный, но не вы должны использовать 'set' при назначении переменных объектов? Как и в 'set CN_sql = Session (" Connection_sql ")', и вам также может понадобиться 'set' в некоторых других назначениях. – Keith

+0

Почему бы не сохранить его в переменной приложения в global.asa.Затем вы можете запустить глобальную замену, чтобы заменить «Session (« Connection_sql »)' на 'Application (« Connection_sql »)' Even на большом сайте, это займет всего несколько секунд. Переменная сеанса кажется странным местом для хранения строки подключения – John

+0

@ Джон: мне все равно придется открыть соединение, и я думаю, что это то, что его раздувает, но я сделаю это. @Keith: 'set' не требуется. Я попытался, но это породило еще одну ошибку. – ccko4800

ответ

3

Похоже, на новом сервере, вы не повторно создать DSN (Data Source Name), указанной в строке подключения:

DSN=sqldb 

Если ваше приложение работает в 32 бит рабочего процесса/приложения бассейн на 64-битных Windows, а затем восстановить ее с помощью:

C:\Windows\SysWOW64\odbcad32.exe 

в противном случае воссоздают с помощью:

C:\Windows\system32\odbcad32.exe 

Это KB статья также достаточно использовать при работе с DSN на 64-разрядных системах:

https://support.microsoft.com/en-us/kb/942976

+0

DSN был создан с использованием 32-битного администратора источника данных ODBC. Я ссылаюсь на него в ConnectionString. Если я прокомментирую 'CN_sql = Session (" Connection_sql "), код будет запущен. – ccko4800

 Смежные вопросы

  • Нет связанных вопросов^_^