当前位置:七道奇文章资讯数据防范Access防范
日期:2011-05-01 23:30:00  来源:本站整理

在 Access 中利用"存储历程"[Access防范]

赞助商链接



  本文“在 Access 中利用"存储历程"[Access防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

    我们已经熟习在 ASP 中通过调用 sql server 存储历程来履行数据库操作,不过大家能否知道,在桌面级数据库 Access 中,我们也可以成立并利用"存储历程"?
Access + ASP 是开辟轻量级 Web 利用程序的绝佳组合:简单,快速,兼容性好,但是性能普通不高.并且,用 ADODB.Connection 和 Recordset 对象来履行 SQL 语句的方法,也有一些不便利,因为带参数的 SQL 语句的参数值也常常是拼接到字符串中,于是便有了诸如"单引号问题"这样的麻烦.利用存储历程的一个好处就是,支持 SQL 语句参数值的别的供应.

  事实上,Access(2000 及以上版本)中所谓"存储历程",和 SQL Server 中的 Stored Procedure 是不能比的.它只能算是"Stored Procedure Lite",不支持多条 SQL 语句,不支持逻辑语句(呵呵,毕竟不是 T-SQL)等等,我也还不清楚它是不是预编译了.不过,恰好像 VBScript 实现的所谓"类"仅仅具有封装性,关于代码构造的"美化"和程序重用性具有很大增长一样,Access 的"轻量存储历程",关于标准,小出错概率的数据库操作应当也有帮忙,并且性能大概会有提高.

  下面我译 step by step 的方法,介绍如安在 Access 中成立存储历程,然后在 ASP 程序中利用它.

  (一)在 Access 中成立"存储历程"

  不知道大家的 Access 利用水平若何,反正它关于我来说,仅仅就是一个 MDB 数据库文件的成立工具,我只会新建 MDB 文件,然后在 Access 的界面中成立表,索引,约束等等,over~

  Access 中的"查询",就扮演了存储历程的角色.下文中我提到的 Access 的"存储历程"大概"查询"都是指这个东西

  关于"查询"的成立,Access 供应了一个傻瓜工具,近似 VS.NET 里边成立 DataAdapter 时的向导.不过我喜好直接写 SQL 代码

  好,下面先看看我们这个简单的例子中所利用的数据库的表构造.
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  然后在 Access 主界面上点击左侧的"查询"按钮,再在右边双击"在计划视图中成立查询",以翻开查询计划视图.
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD

这时弹出的是可视化的查询生成器,我们首先增添 SQL 语句需求触及的表.
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  增添表之后,在计划视图上点击鼠标右键,挑选"SQL 视图",以切换到 SQL 代码编辑窗口.
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  好,下面说说 Access 的存储历程的特点.

  Access 的查询,我目前的感受是对 SQL 语句的一个包装,大概举行了某种优化如预编译.我们不能像写 SQL Server 存储历程那样利用多重操作,事件,逻辑判断,循环等等……
wwww.iTbulo.combJJXD



 但是我们利用 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 语句后存并命名.
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  另一个读取数据的存储历程代码.
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


利用存储历程

然后我们可以在 ASP 程序中调用这些存储历程了.

  这里可以看到为什么我说 Access 中的查询就是它的存储历程——我们的 Command 对象的 CommandType 属性设置的是 4,即 Stored Proc!

  so...

  以下的代码很简单:


  代码:
  --------------------------------------------------------------------------------
   wwww.iTbulo.combJJXD

<%
  Option Explicitwwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  Dim s
  Randomize
  s = Rnd * 100wwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  Dim conn, cmd
  Set conn = Server.CreateObject("ADODB.Connection")
  Set cmd = Server.CreateObject("ADODB.Command")wwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("sp.mdb")wwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  With cmd
  .ActiveConnection = conn
  .CommandType = &H0004 '存储历程
  .CommandText = "AddNewData"
  End Withwwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  cmd.Execute , Array(CStr(Now()), CSng(s))wwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  With cmd
  .ActiveConnection = conn
  .CommandType = &H0004 '存储历程
  .CommandText = "GetData"
  End Withwwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  Dim resultRS, resultArray
  Set resultRS = cmd.Execute(, Null)wwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  If Not resultRS.EOF Then
  resultArray = resultRS.GetRows()
End Ifwwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  Set resultRS = Nothing
  Set cmd = Nothing
  conn.Close
  Set conn = Nothingwwww.iTbulo.combJJXD


 wwww.iTbulo.combJJXD

  Response.Write "<ul>"
  Dim i
  For i = 0 To UBound(resultArray, 2)
  Response.Write "<li>" & resultArray(0, i)
  Response.Write " " & resultArray(1, i)
  Response.Write " " & resultArray(2, i)
  Response.Write "</li>"
  Next
  Response.Write "</ul>"
  %>wwww.iTbulo.combJJXD


  --------------------------------------------------------------------------------

  运行后果.
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  感受起来,速度仿佛很快,呵呵~

  不知道这样在 Access 中利用存储历程的意义大不大,不过确切很好玩
wwww.iTbulo.combJJXD

  以上是“在 Access 中利用"存储历程"[Access防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 在Access2007"快速拜候工具栏"增添更多号令
  • 在Access表顶用组合框挑选备选项目
  • 在Access2007中利用"多值"实现文字的sum
  • 如安在Access2007 表中同时显示明细、小计、总计?
  • 在Access2007表中增添和删除字段
  • 在Access2007中利用"计划视图"成立查询
  • 在Access中成立表及若何指定字段范例
  • 在Access数据库中实现密码管理
  • 在Access 2007中保护Access密码和举行加密
  • <b>在ActiveX控件中检测IE中STOP按钮的按下</b>
  • 在ActiveX控件中引入窗体技术
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .