一、说明
所有数据库操作都遵循同一套路:创建连接 → 执行 SQL → 处理结果 → 关闭释放。
| 操作 | 使用对象 | 关键方法 | 备注 |
|---|---|---|---|
| 查询 | Connection + Recordset | rs.Open sql, cnn | 需要遍历结果集 |
| 插入 | Connection | conn.Execute sql, recaffected | 返回受影响行数 |
| 更新 | Connection | conn.Execute sql, recaffected | 同上 |
| 删除 | Connection | conn.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 编码、数据库排序规则不一致。
- 连接串未指定字符集。
解决措施
- ASP 文件顶部声明 UTF-8:
<%@ codepage=65001 %> <meta http-equiv="content-type" content="text/html; charset=utf-8"> - 连接串添加字符集参数(SQL Server):
cnn1.Open "provider=sqloledb;data source=.;initial catalog=StudentCourse;user id=sa;password=123321;Current Language=简体中文;" - 数据库字段排序规则:确保为
Chinese_PRC_CI_AS或Latin1_General_CI_AS(根据需求)。 - 参数化查询(推荐,避免注入和编码问题):
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)
Previous: ADO 连接 SQL Server 的正确用法 与 错误提示的开启方法