Свързване към SQLExpress от Classic ASP приложение

Имам локална база данни SQLExpress. Трябва да се свържа с това от класическо ASP уеб приложение.

Мисля, че моят низ за връзка е правилен, защото когато тествам с помощта на конзолно приложение на C#, мога да се свържа и да чета данни:

// 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 Driver Manager] Името на източника на данни не е намерено и не е посочен драйвер по подразбиране

Също така се опитах да настроя вход за 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 бита? Как работи c# по отношение на архитектурата? Ако сървърът е 64-битов и c# работи 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. Дайте разрешения на потребителя да чете, пише, избира (всичко) елементи в DB (YMMV - беше необходимо за моето приложение)
  3. Конфигурирайте ODBC (32 бита) (C:\Windows\SysWOW64\odbcad32.exe) така, че "SqlConnectString" да използва собствен SQL клиент 11 за свързване към (локален)\SQLEXPRESS

    • Set SQL login credentials
    • Задайте DB по подразбиране да бъде testDB
  4. Променете кода на ASP връзка от: con.Open(Application("SqlConnectString")); to con.Open("DSN=SqlConnectString;User Id=[потребителско име];Парола=[парола]");

Вашият стар ASP код вече говори с SQL Express.

person s d    schedule 29.12.2015

Опитвали ли сте:

connString = "Доставчик=SQLOLEDB; СЪРВЪР=МОЯТ СЪРВЪР\SQLEXPRESS; База данни=MYDB; Uid=sa; Pwd=Пропуск!@#"

person need2lease    schedule 08.10.2015