但是我们使用 Access 存储过程的主要目的,就是使用参数额外提供的查询,使用存储过程,我们不必再面对将参数值拼接到 SQL 语句字符串中时遇到的各种麻烦,比如: 代码: -------------------------------------------------------------------------------- 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 语句后存并命名。
另一个读取数据的存储过程代码。