在ADO中,查询的一般过程是创建Connection对象连接数据库,再创建Command对象执行SQL语句或存储过程。如果SQL语句有返回数据,则用Recordset对象接收,然后以游标方式遍历Recordset中的每一行,读取查询结果(也可把整个Recordset保存到文件或数据流中)。在一般场合,Command对象可以省略,其职能由Connection对象和Recordset对象代替。不过如果采用参数化查询,则少不了Command对象。该对象创建后,先指定SQL语句(或存储过程),然后创建SQL语句中待定的各个参数,给参数赋值后再执行Command对象。
待定的参数用Parameter对象代表。在Parameter对象中,Name 属性可设置或返回参数名称,Value 属性可设置或返回参数值,Direction属性指示是输入参数、输出参数还是输入输出参数,Type属性定义参数的数据类型,其他几个属性可设置或返回参数特性。
Command对象有一个Parameters属性,它是Parameters集合类型,其中包含SQL语句(或存储过程)的所有参数。在Parameters集合中,可以通过名称或序号访问各个参数。通常,用Command对象的CreateParameter方法创建每个Parameter对象,再用Parameters集合的Append方法添加进来。Command对象还有一个布尔类型的Prepared属性,该属性如果为True,则表示该指令在第一次执行之前必须保存查询语句。
为了使大家对ADO中的参数化查询有更清晰的认识,这里举一个例子。在这个例子中,应用程序访问Access数据库。数据库路径为d:/db.mdb,里面的数据表table1包含两个数据列,其中column1为数字类型,column2为文本类型。下面的代码向数据表依次插入“西施”、“昭君”、“貂蝉”3位古代美女,然后查询插入的第二条记录,如果执行成功,会弹出对话框显示插入到表中的数据“昭君”。
Dim cnn As Connection ' 连接到Access数据库
Dim cmd1 As Command ' 插入数据的SQL命令
Dim cmd2 As Command ' 查询数据的SQL命令
Dim rs As Recordset ' 返回查询结果
Dim param1 As Parameter ' 数字类型的参数
Dim param2 As Parameter ' 文本类型的参数
Set cnn = New Connection
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/db1.mdb"
cnn.Execute "DELETE FROM table1", , adExecuteNoRecords
' 向数据表插入3条数据
Set cmd1 = New Command
cmd1.ActiveConnection = cnn
cmd1.CommandType = adCmdText
' 指定SQL语句
cmd1.CommandText = "INSERT INTO table1 VALUES(?,?)"
cmd1.Prepared = True
' 创建参数
Set param1 = cmd1.CreateParameter("column1", adInteger)
cmd1.Parameters.Append param1
Set param2 = cmd1.CreateParameter("column2", adVarChar, , 100)
cmd1.Parameters.Append param2
' 插入1,"西施"
param1.Value = 1
param2.Value = "西施"
cmd1.Execute , , adExecuteNoRecords
' 插入2,"昭君"
param1.Value = 2
param2.Value = "昭君"
cmd1.Execute , , adExecuteNoRecords
' 插入3,"貂蝉"
param1.Value = 3
param2.Value = "貂蝉"
cmd1.Execute , , adExecuteNoRecords
' 查询第2条记录
Set cmd2 = New Command
cmd2.ActiveConnection = cnn
cmd2.CommandType = adCmdText
' 指定SQL语句
cmd2.CommandText = "SELECT column2 FROM table1 WHERE column1=?"
cmd2.Prepared = True
' 创建参数并赋值
cmd2.Parameters.Append cmd2.CreateParameter("column1", adInteger, , , 2)
' 查询并显示查询结果
Set rs = cmd2.Execute
If Not rs.EOF Then
MsgBox rs(0)
End If
上面的代码是用VB编写的。稍作修改,就可以移植到ASP脚本中。
本文介绍ADO中使用参数化查询的方法,通过VB代码示例展示了如何创建参数、执行插入和查询操作。适用于提高数据库操作的安全性和效率。
546

被折叠的 条评论
为什么被折叠?



