Подключение к SQLExpress из классического приложения ASP

У меня есть локальная база данных SQLExpress. Мне нужно подключиться к этому из классического веб-приложения ASP.

Я думаю, что моя строка подключения верна, потому что при тестировании с помощью консольного приложения С# я могу подключаться и читать данные:

// C# Example app
var connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=TestData;Integrated Security=True";
var con = new SqlConnection(connectionString);

 con.Open();
 var cmd = new SqlCommand("SELECT * FROM tbl", con);

 cmd.ExecuteNonQuery();
 var reader = cmd.ExecuteReader();
 while(reader.Read())
 {
    Console.WriteLine(reader.GetValue(1)); // displays data
 }

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

// ASP Web App
connection = Server.CreateObject("ADODB.Connection");
connectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=TestData;Integrated Security=True";
Response.Write("connectionString:" + connectionString + "<br/>");
connection.Open(Application(connectionString)); // error

Метод Open терпит неудачу с:

0x80004005 — Поставщик Microsoft OLE DB для драйверов ODBC: [Microsoft] [Диспетчер драйверов ODBC] Имя источника данных не найдено и не указан драйвер по умолчанию

Я также попытался настроить логин для базы данных SQL и использовать идентификатор пользователя и пароль:

var connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=TestData;User Id=AspTest;Password=Test";

Это не удается таким же образом.

Как я могу заставить свое веб-приложение подключаться к моей базе данных?


person s d    schedule 08.10.2015    source источник
comment
Попробуйте удалить одну из обратных косых черт из этого: Data Source=.\\SQLEXPRESS   -  person markpsmith    schedule 08.10.2015
comment
@markpsmith Я получаю тот же результат с Data Source=.\SQLExpress;   -  person s d    schedule 08.10.2015
comment
Я не понимаю, как здесь поможет изменение строки подключения, поскольку вы можете видеть, что строка подключения, которую я использовал, работает с моим образцом C#.   -  person s d    schedule 08.10.2015
comment
Возможно, проблема в 32-битной и 64-битной версиях? Как работает С# с точки зрения архитектуры? Если сервер 64-разрядный, а С# работает, например, 32-разрядный, то включено ли веб-приложение для 32-разрядного режима в пуле приложений?   -  person user692942    schedule 09.10.2015


Ответы (3)


Если код ASP, который вы показываете, — это то, что вы на самом деле используете, Application(connectionString), скорее всего, возвращает значение null/ничего, поскольку объект приложения является словарем. Вы пытались открыть соединение, используя строку подключения напрямую:

connection.Open(connectionString); 

Обычный шаблон заключается в том, чтобы присвоить Application("conectionString") = "ваша строка подключения" в global.asa, а затем использовать следующий код для создания подключения:

connection.Open(Application("connectionString")); 

Кроме того, вам понадобятся разные строки подключения для ASP и .NET, как указано в предыдущем ответе.

person schudel    schedule 08.10.2015
comment
Будьте осторожны, сохраняйте только строки подключения, а не объект ADODB.connection в объектах Application или Session. - person user692942; 09.10.2015
comment
Не большой поклонник использования шаблона Application("connectionString"), поскольку изменения в соединении требуют перезапуска пула приложений. Хранение в объекте Session работает лучше, так как сеанс можно легко отменить. - person user692942; 09.10.2015
comment
Справедливо. Моя главная мысль заключается в том, что код использует значение строки подключения в качестве ключа поиска в объекте приложения. - person schudel; 09.10.2015
comment
Нет, я согласен. Application(connectionString) неверно, если у них уже определена переменная connectionString, образец кода просто использует это. Должно быть connection.Open(connectionString);. В данный момент Application собирается искать ключ с именем Data Source=.\\SQLEXPRESS;Initial Catalog=TestData;Integrated Security=True, что не имеет смысла. - person user692942; 09.10.2015
comment
Это было полезно, объект Application был пуст. - person s d; 14.10.2015

Шаги:

  1. Добавьте пользователя для локальной базы данных SQL (включая имя пользователя и пароль)
  2. Дайте пользователю права на чтение, запись, выбор (всего) элементов в БД (YMMV - это требовалось для моего приложения)
  3. Настройте ODBC (32-разрядный) (C:\Windows\SysWOW64\odbcad32.exe) таким образом, чтобы "SqlConnectString" использовал собственный клиент SQL 11 для подключения к (локальному)\SQLEXPRESS.

    • Set SQL login credentials
    • Установить базу данных по умолчанию в качестве testDB
  4. Измените код подключения ASP с: con.Open(Application("SqlConnectString")); to con.Open("DSN=SqlConnectString;Идентификатор пользователя=[имя пользователя];Пароль=[пароль]");

Ваш старый код ASP теперь общается с SQL Express.

person s d    schedule 29.12.2015

Ты пытался:

connString = "Provider=SQLOLEDB; SERVER=MYSERVER\SQLEXPRESS; Database=MYDB; Uid=sa; Pwd=Pass!@#"

person need2lease    schedule 08.10.2015