ADO 连接 SQL Server 的正确用法​ 与 错误提示的开启方法

一、 ADO 数据库连接核心概念

  • ADO(ActiveX Data Objects):ASP 中用于访问数据库的技术。
  • 核心对象
    • Connection:建立与数据库的连接。
    • Recordset:存储查询结果集。
    • Command(可选):执行带参数的 SQL 命令。
  • 连接提供程序
    • OLE DB(推荐):provider=sqloledb(性能更好,功能更全)。
    • ODBC:需配置系统 DSN 或使用 ODBC 驱动串。

二、 OLE DB 连接 SQL Server 示例

<%
    ' 1. 创建 Connection 对象
    Set cnn1 = Server.CreateObject("ADODB.Connection")
    
    ' 2. 打开连接(注意实例名,默认实例用 "." 或 "(local)")
    cnn1.Open "provider=sqloledb;" & _
              "data source=.;" & _
              "initial catalog=StudentCourse;" & _
              "user id=sa;" & _
              "password=123321;"
    
    ' 3. 执行查询
    sql = "SELECT * FROM [dbo].[S]"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, cnn1, 1, 1   ' 1,1 = 只读游标
%>Code language: HTML, XML (xml)

关键注意点

  • SQL Server 实例名:若安装的不是默认实例,必须写出实例名。
    • 默认实例:data source=.data source=(local)
    • 命名实例:data source=.\SQLExpressdata source=localhost\实例名
  • initial catalog:指定数据库名(等同于 Database=StudentCourse)。

三、 开启错误提示(方便调试)

ASP 默认可能不显示详细错误,可在页面顶部或 Global.asa 中添加:

<%
    ' 开启详细错误提示(调试用,生产环境务必关闭)
    On Error Resume Next   ' 先开启错误捕获
    
    ' 你的数据库代码...
    cnn1.Open "..."
    
    ' 检查是否有错误
    If Err.Number <> 0 Then
        Response.Write "错误编号:" & Err.Number & "<br>"
        Response.Write "错误描述:" & Err.Description & "<br>"
        Response.Write "出错文件:" & Err.Source & "<br>"
        Err.Clear
    End If
%>Code language: PHP (php)

或者直接在 IIS 中设置:

  • IIS 管理器 → 站点 → ASP → 调试属性 → “将错误发送到浏览器”设为 True
  • “脚本错误消息”​ 可自定义。

四、 报错分析:你的错误原因与解决

错误信息
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
/simpleform.asp,行 6Code language: JavaScript (javascript)
原因诊断
  1. 提供程序不匹配:错误信息显示的是 OLE DB Provider for ODBC Drivers,说明代码实际使用的是 ODBC 驱动,而非你写的 provider=sqloledb
  2. 可能原因
    • 连接串被覆盖或未生效(比如文件中有多个连接对象,实际执行的是另一个 ODBC 连接)。
    • 服务器上未安装 SQL Server OLE DB 提供程序,系统回退到 ODBC。
    • 连接串写错,导致 ADO 自动尝试 ODBC DSN 连接,但找不到 DSN。
解决方案
方案 1:确认使用 OLE DB 并安装提供程序

确保服务器已安装 Microsoft OLE DB Driver for SQL Server(或旧版 sqloledb)。

连接串明确指定:

cnn1.Open "provider=sqloledb;server=.;database=StudentCourse;uid=sa;pwd=123321;"Code language: JavaScript (javascript)
方案 2:改用 ODBC 连接串(如果环境只有 ODBC)
cnn1.Open "Driver={SQL Server};Server=.;Database=StudentCourse;Uid=sa;Pwd=123321;"Code language: JavaScript (javascript)

或(使用 SQL Server Native Client):

cnn1.Open "Driver={SQL Server Native Client 11.0};Server=.;Database=StudentCourse;Uid=sa;Pwd=123321;"Code language: JavaScript (javascript)
方案 3:检查实例名

如果 SQL Server 是命名实例(如 .\SQLEXPRESS),必须写明:

cnn1.Open "provider=sqloledb;data source=.\SQLEXPRESS;initial catalog=StudentCourse;user id=sa;password=123321;"Code language: JavaScript (javascript)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注