在ASP(Active Server Pages)开发中,数据库操作是核心功能之一,通过源代码实现与数据库的交互(如Access、SQL Server等)主要依赖ADO(ActiveX Data Objects)技术,以下是详细的ASP数据库操作源代码实现步骤及关键代码示例,涵盖环境搭建、连接创建、数据增删改查及错误处理等内容。

环境与数据库准备
首先需确保服务器支持ASP(如IIS),并根据数据库类型安装相应驱动(如Access需Jet引擎,SQL Server需OLE DB或ODBC驱动),以Access和SQL Server为例,假设已创建数据库:
- Access数据库:创建
db.mdb或db.accdb,内含表UserInfo(字段:ID自动编号、UserName文本、Password文本)。 - SQL Server数据库:创建数据库
MyDB,表UserInfo同上,并配置好数据库连接权限(如Windows认证或SQL Server账号)。
数据库连接源代码
ASP通过ADODB.Connection对象建立数据库连接,核心是连接字符串(Connection String),以下是两种常用数据库的连接代码:
Access数据库连接(OLE DB方式)
<%
' 引入ADO库
Server.ScriptTimeout = 500
Response.Buffer = True
' 创建连接对象
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
' 定义连接字符串(根据实际路径调整)
Dim dbPath
dbPath = Server.MapPath("db.mdb") ' 数据库文件相对于当前ASP文件的路径
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath & ";Persist Security Info=False;"
' 打开连接
conn.Open connStr
If conn.State = 1 Then
Response.Write "Access数据库连接成功!"
Else
Response.Write "Access数据库连接失败!"
End If
' 关闭连接(使用后需关闭,释放资源)
conn.Close
Set conn = Nothing
%> SQL Server数据库连接(OLE DB方式)
<%
Dim conn, connStr
Set conn = Server.CreateObject("ADODB.Connection")
' 连接字符串(替换为实际服务器名、数据库名、账号密码)
connStr = "Provider=SQLOLEDB;Data Source=服务器名或IP;Initial Catalog=MyDB;User ID=sa;Password=密码;"
' 打开连接
conn.Open connStr
If conn.State = 1 Then
Response.Write "SQL Server数据库连接成功!"
Else
Response.Write "SQL Server数据库连接失败!"
End If
conn.Close
Set conn = Nothing
%> 数据库连接字符串参数说明(表格)
| 数据库类型 | 关键参数 | 说明 |
|---|---|---|
| Access | Provider | 数据提供程序,Access 2003用Microsoft.Jet.OLEDB.4.0,Access 2007+用Microsoft.ACE.OLEDB.12.0 |
| Data Source | 数据库文件物理路径(需用Server.MapPath转换虚拟路径) | |
| SQL Server | Data Source | 服务器名称或IP地址(本地可用(local)) |
| Initial Catalog | 要连接的数据库名称 | |
| User ID/Password | 数据库登录账号和密码(若Windows认证可省略,改用Integrated Security=SSPI) |
数据操作源代码(增删改查)
通过ADODB.Recordset对象查询数据,Connection对象的Execute方法执行增删改操作。

查询数据(Select)
<%
Dim conn, rs, sql
Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
' 假设已建立连接(conn.Open connStr)
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb") & ";"
conn.Open connStr
' SQL查询语句
sql = "SELECT ID, UserName FROM UserInfo WHERE UserName LIKE '%张%'"
' 打开记录集(1为只读,2为动态锁,3为静态锁,4为快照锁)
rs.Open sql, conn, 1, 1
' 输出查询结果
If rs.EOF And rs.BOF Then
Response.Write "没有找到符合条件的用户!"
Else
Response.Write "<table border='1'><tr><th>ID</th><th>用户名</th></tr>"
Do While Not rs.EOF
Response.Write "<tr><td>" & rs("ID") & "</td><td>" & rs("UserName") & "</td></tr>"
rs.MoveNext ' 移动到下一条记录
Loop
Response.Write "</table>"
End If
' 关闭记录集和连接
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
%> 添加数据(Insert)
<%
Dim conn, sql
Set conn = Server.CreateObject("ADODB.Connection")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb") & ";"
conn.Open connStr
' 获取表单数据(假设提交了UserName和Password)
Dim userName, password
userName = Request.Form("userName")
password = Request.Form("password")
' 防止SQL注入(简单过滤)
userName = Replace(userName, "'", "''")
password = Replace(password, "'", "''")
' SQL插入语句
sql = "INSERT INTO UserInfo (UserName, Password) VALUES ('" & userName & "', '" & password & "')"
' 执行SQL(Execute方法返回影响的行数)
Dim rowsAffected
rowsAffected = conn.Execute(sql)(0)
If rowsAffected > 0 Then
Response.Write "添加成功!"
Else
Response.Write "添加失败!"
End If
conn.Close
Set conn = Nothing
%> 修改数据(Update)
<%
Dim conn, sql
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb") & ";"
Dim id, newUserName
id = Request.Form("id")
newUserName = Replace(Request.Form("newUserName"), "'", "''")
sql = "UPDATE UserInfo SET UserName = '" & newUserName & "' WHERE ID = " & id
conn.Execute sql
Response.Write "修改成功!"
conn.Close
Set conn = Nothing
%> 删除数据(Delete)
<%
Dim conn, sql
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb") & ";"
Dim id
id = Request.QueryString("id") ' 通过URL参数传递ID
sql = "DELETE FROM UserInfo WHERE ID = " & id
conn.Execute sql
Response.Write "删除成功!"
conn.Close
Set conn = Nothing
%> 错误处理与资源释放
数据库操作需添加错误处理,避免因异常导致连接未释放(引发服务器资源泄漏),使用On Error Resume Next捕获错误,并通过Connection对象的Errors集合获取错误信息:
<%
On Error Resume Next ' 启用错误捕获
Dim conn, rs
Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb") & ";"
If Err.Number <> 0 Then
Response.Write "数据库错误:" & Err.Description & "<br>"
Response.Write "错误号:" & Err.Number
Else
' 正常执行数据库操作...
rs.Open "SELECT * FROM UserInfo", conn, 1, 1
' ...(省略查询输出代码)
End If
' 确保关闭对象(无论是否出错)
If Not rs Is Nothing Then
If rs.State = 1 Then rs.Close
Set rs = Nothing
End If
If Not conn Is Nothing Then
If conn.State = 1 Then conn.Close
Set conn = Nothing
End If
On Error GoTo 0 ' 关闭错误捕获
%> 相关问答FAQs
问题1:ASP连接Access数据库时提示“未找到提供程序”怎么办?
解答:通常是因为系统未安装对应的Jet引擎或ACE引擎,对于Access 2003及更早版本,需安装Jet 4.0 SP8引擎;对于Access 2007及以上版本(.accdb文件),需安装Access Database Engine 2016 Redistributable(32位或64位需与IIS匹配),检查连接字符串中的Provider参数是否正确(如Access 2007+用Microsoft.ACE.OLEDB.12.0)。
问题2:ASP如何防止SQL注入攻击?
解答:SQL注入攻击通过拼接恶意SQL语句实现,可通过以下方式防范:

- 参数化查询:使用
ADODB.Command对象,通过参数传递变量值,避免SQL语句拼接,示例:Dim cmd, param Set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = conn cmd.CommandText = "SELECT * FROM UserInfo WHERE UserName = ? AND Password = ?" cmd.Parameters.Append cmd.CreateParameter("param1", 200, 1, 50, userName) ' 200=adVarWChar, 1=adInput cmd.Parameters.Append cmd.CreateParameter("param2", 200, 1, 50, password) Set rs = cmd.Execute - 输入过滤:对用户输入的特殊字符(如单引号、分号、注释符)进行转义或替换,如用
Replace函数将单引号替换为两个单引号()。 - 限制权限:使用数据库账号仅授予必要权限(如禁止删除、修改表结构),减少注入后的危害。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复