从 Classic ASP 应用程序连接到 SQLExpress

Connecting to SQLExpress from Classic ASP application

我有一个本地 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 Provider for ODBC Drivers: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

我还尝试为 SQL 数据库设置登录并使用用户 ID 和密码:

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

同样失败。

如何让我的网络应用程序连接到我的数据库?

你试过了吗:

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

如果您显示的 ASP 代码是您实际使用的代码,Application(connectionString) 很可能 returns null/nothing 因为应用程序对象是一个字典。您是否尝试过直接使用连接字符串打开连接:

connection.Open(connectionString); 

通常的模式是在 global.asa 中分配 Application("conectionString") = "your connection string" 然后使用以下代码创建连接:

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

此外,您将需要 ASP 和 .NET 的不同连接字符串,如前一个答案所示。

步数:

  1. 为本地 SQL 数据库添加一个用户(包括用户名和 密码)
  2. 授予用户读取、写入、select(所有)数据库中项目的权限(YMMV - 这是我的应用程序所必需的)
  3. 配置 ODBC(32 位)(C:\Windows\SysWOW64\odbcad32.exe),以便 "SqlConnectString" 使用 SQL 本机客户端 11 连接到(本地)\SQL快递

    • 设置SQL登录凭据
    • 将默认数据库设置为测试数据库
  4. 更改 ASP 连接代码: con.Open(应用程序("SqlConnectString")); 到 con.Open("DSN=SqlConnectString;User Id=[username];Password=[password]");

您的旧 ASP 代码现在与 SQL Express 通信。