|
在 Access 中使用“存储过程”(2) 代码: Dim sql sql = "SELECT * FROM Users WHERE UserName = '" & userName & "'"
以上代码中,如果字符串变量 userName 中含有“'”单引号,则会报错。我们必须手工转化:
代码: Dim sql sql = "SELECT * FROM Users WHERE UserName = '" & Replace(userName, "'", "''") & "'" '转化为连续两个单引号
而使用带参数查询,我们的 SQL 语句可以写为:
代码: Dim sql sql = "SELECT * FROM Users WHERE UserName = @userName"
然后把参数 @userName 的值以 Command 对象的 Parameter 属性来传入即可,很方便直观。
代码: With cmd '创建参数对象 .Parameters.Append .CreateParameter("@userName")
'给各参数指定值 .Parameters("@userName") = userName End With
这里还要说明 Access 存储过程中参数的使用。和 SQL Server 的存储过程中用 @ 变量指定参数,然后同名传入参数对象不同,Access 中的参数,是以“顺序”而非“名字”来识别的。传入的参数无需指定名字,随便起,SQL 中的参数名字也可以随便起,只要传入参数值时,按照 SQL 语句中的参数出现顺序指定就行了。通常,我们使用 Command 对象的 Execute 方法,直接传入参数值数组来执行~
代码: cmd.Execute , Array(userName)
再比如,你的一个 Access 存储过程这么写:
代码: select * from Users where UserName = p_UserName and BookTitle = p_bookTitle
你可以就这么执行,通过传入参数值数组,但是顺序要对应:
代码: cmd.Execute , Array(userName, bookTitle)
OK,看看我们的例子中使用的两个查询,一个是写入数据。写好 SQL 语句后保存并命名。

另一个读取数据的存储过程代码。

(二)使用存储过程
然后我们可以在 ASP 程序中调用这些存储过程了。
这里可以看到为什么我说 Access 中的查询就是它的存储过程——我们的 Command 对象的 CommandType 属性设置的是 4,即 Stored Proc!
so...
以下的代码很简单:
代码: <% Option EXPlicit
Dim s Randomize s = Rnd * 100
Dim conn, cmd Set conn = Server.CreateObject("ADODB.Connection") Set cmd = Server.CreateObject("ADODB.Command")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("sp.mdb")
With cmd
|