ASP 数据库操作(ADO)

一、说明

所有数据库操作都遵循同一套路:创建连接 → 执行 SQL → 处理结果 → 关闭释放

操作使用对象关键方法备注
查询Connection + Recordsetrs.Open sql, cnn需要遍历结果集
插入Connectionconn.Execute sql, recaffected返回受影响行数
更新Connectionconn.Execute sql, recaffected同上
删除Connectionconn.Execute sql, recaffected同上

二、 查询数据(SELECT)

完整示例

<body>
Welcome
<%
    ' 1. 创建连接
    Set cnn1 = Server.CreateObject("ADODB.Connection") 
    ' 2. 打开连接(注意实例名,非默认必须写出)
    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 = 只读向前游标
    
    ' 4. 遍历结果集
    Do While Not rs.EOF
        For Each x In rs.Fields
            Response.Write x.Value & "----"
        Next   
        Response.Write "<br/>"     
        rs.MoveNext
    Loop
    
    ' 5. 关闭释放
    rs.Close
    cnn1.Close
    Set rs = Nothing
    Set cnn1 = Nothing
%>
</body>Code language: PHP (php)

注意

  • rs.EOF:判断是否到末尾。
  • rs.Fields:集合,可遍历所有字段。
  • 游标参数1,1 表示只读,适合单纯显示数据,性能较好。

三、 插入数据(INSERT)

<meta http-equiv="content-type" content="text/html; charset=utf-8">
<%
    Set conn = Server.CreateObject("ADODB.Connection") 
    conn.Open "provider=sqloledb;data source=.;initial catalog=StudentCourse;user id=sa;password=123321;" 
    
    sql = "INSERT INTO [dbo].[S] ([SNO],[SNAME]) VALUES ('100','zhangsanfeng')" 
    
    On Error Resume Next   ' 开启错误捕获
    conn.Execute sql, recaffected
    
    If Err <> 0 Then
        Response.Write Err.Description & "<br>"
        Response.Write "失败!"
    Else
        Response.Write recaffected & " 行受影响,操作成功!"
    End If
    
    conn.Close
    Set conn = Nothing
%>Code language: PHP (php)

四、 更新数据(UPDATE)

与插入几乎一样,仅 SQL 语句不同。

<meta http-equiv="content-type" content="text/html; charset=utf-8">
<%
    Set conn = Server.CreateObject("ADODB.Connection") 
    conn.Open "provider=sqloledb;data source=.;initial catalog=StudentCourse;user id=sa;password=123321;" 
    
    sql = "UPDATE [dbo].[S] SET SNAME = 'HAHAHA' WHERE ID = 12" 
    
    On Error Resume Next
    conn.Execute sql, recaffected
    
    If Err <> 0 Then
        Response.Write Err.Description & "<br>"
        Response.Write "失败!"
    Else
        Response.Write recaffected & " 行受影响,操作成功!"
    End If
    
    conn.Close
    Set conn = Nothing
%>Code language: JavaScript (javascript)

五、 删除数据(DELETE)

<meta http-equiv="content-type" content="text/html; charset=utf-8">
<%
    Set conn = Server.CreateObject("ADODB.Connection") 
    conn.Open "provider=sqloledb;data source=.;initial catalog=StudentCourse;user id=sa;password=123321;" 
    
    sql = "DELETE FROM [dbo].[S] WHERE ID > 12" 
    
    On Error Resume Next
    conn.Execute sql, recaffected
    
    If Err <> 0 Then
        Response.Write Err.Description & "<br>"
        Response.Write "失败!"
    Else
        Response.Write recaffected & " 行受影响,操作成功!"
    End If
    
    conn.Close
    Set conn = Nothing
%>Code language: JavaScript (javascript)

六、 中文乱码问题与解决方案

现象

执行含中文字符的 SQL 时,可能报错或写入乱码。

原因
  • ASP 文件编码、HTML 编码、数据库排序规则不一致。
  • 连接串未指定字符集。
解决措施
  1. ASP 文件顶部声明 UTF-8<%@ codepage=65001 %> <meta http-equiv="content-type" content="text/html; charset=utf-8">
  2. 连接串添加字符集参数(SQL Server): cnn1.Open "provider=sqloledb;data source=.;initial catalog=StudentCourse;user id=sa;password=123321;Current Language=简体中文;"
  3. 数据库字段排序规则:确保为 Chinese_PRC_CI_ASLatin1_General_CI_AS(根据需求)。
  4. 参数化查询(推荐,避免注入和编码问题): Set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = conn cmd.CommandText = "INSERT INTO [dbo].[S] ([SNO],[SNAME]) VALUES (?,?)" cmd.Parameters.Append cmd.CreateParameter("@sno", 200, 1, 50, "100") cmd.Parameters.Append cmd.CreateParameter("@sname", 200, 1, 50, "张三丰") cmd.Execute

七、 代码优化

1. 使用 #include 统一数据库连接

创建 conn.inc

<%
    Set conn = Server.CreateObject("ADODB.Connection") 
    conn.Open "provider=sqloledb;data source=.;initial catalog=StudentCourse;user id=sa;password=123321;"
%>Code language: HTML, XML (xml)

在页面中引用:

<!--#include file="conn.inc"-->Code language: HTML, XML (xml)
2. 错误处理统一封装
Sub CheckError(objConn)
    If Err <> 0 Then
        Response.Write "错误:" & Err.Description
        If IsObject(objConn) Then objConn.Close
        Set objConn = Nothing
        Response.End
    End If
End SubCode language: JavaScript (javascript)

发表回复

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