日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 數(shù)據(jù)庫 > access > 在 Access 中使用“存儲過程”

在 Access 中使用“存儲過程”

來源:程序員人生   發(fā)布時間:2014-02-28 03:08:17 閱讀次數(shù):2927次

    我們已經(jīng)熟悉在 ASP 中通過調(diào)用 sql server 存儲過程來執(zhí)行數(shù)據(jù)庫操作,不過大家是否知道,在桌面級數(shù)據(jù)庫 Access 中,我們也能夠創(chuàng)建并使用“存儲過程”?
Access + ASP 是開發(fā)輕量級 Web 應(yīng)用程序的絕佳組合:簡單,快速,兼容性好,但是性能通常不高。并且,用 ADODB.Connection 和 Recordset 對象來執(zhí)行 SQL 語句的方式,也有一些不方便,因?yàn)閹?shù)的 SQL 語句的參數(shù)值也常常是拼接到字符串中,于是便有了諸如“單引號問題”這樣的麻煩。使用存儲過程的一個好處就是,支持 SQL 語句參數(shù)值的另外提供。

  事實(shí)上,Access(2000 及以上版本)中所謂“存儲過程”,和 SQL Server 中的 Stored Procedure 是不能比的。它只能算是“Stored Procedure Lite”,不支持多條 SQL 語句,不支持邏輯語句(呵呵,畢竟不是 T-SQL)等等,我也還不清楚它是不是預(yù)編譯了。不過,正如同 VBScript 實(shí)現(xiàn)的所謂“類”僅僅具有封裝性,對于代碼結(jié)構(gòu)的“美化”和程序重用性具有很大促進(jìn)一樣,Access 的“輕量存儲過程”,對于規(guī)范,小出錯幾率的數(shù)據(jù)庫操作應(yīng)該也有幫助,并且性能可能會有提高。

  下面我譯 step by step 的方式,介紹如何在 Access 中創(chuàng)建存儲過程,然后在 ASP 程序中使用它。

  (一)在 Access 中創(chuàng)建“存儲過程”

  不知道大家的 Access 應(yīng)用水平如何,反正它對于我來說,僅僅就是一個 MDB 數(shù)據(jù)庫文件的創(chuàng)建工具,我只會新建 MDB 文件,然后在 Access 的界面中創(chuàng)建表,索引,約束等等,over~

  Access 中的“查詢”,就扮演了存儲過程的角色。下文中我提到的 Access 的“存儲過程”或者“查詢”都是指這個東西

  對于“查詢”的創(chuàng)建,Access 提供了一個傻瓜工具,類似 VS.NET 里邊建立 DataAdapter 時的向?qū)?。不過我喜歡直接寫 SQL 代碼

  好,下面先看看我們這個簡單的例子中所使用的數(shù)據(jù)庫的表結(jié)構(gòu)。
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  然后在 Access 主界面上點(diǎn)擊左側(cè)的“查詢”按鈕,再在右邊雙擊“在設(shè)計(jì)視圖中創(chuàng)建查詢”,以打開查詢設(shè)計(jì)視圖。
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD

這時彈出的是可視化的查詢生成器,我們首先添加 SQL 語句需要涉及的表。
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  添加表之后,在設(shè)計(jì)視圖上點(diǎn)擊鼠標(biāo)右鍵,選擇“SQL 視圖”,以切換到 SQL 代碼編輯窗口。
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  好,下面說說 Access 的存儲過程的特點(diǎn)。

  Access 的查詢,我目前的感覺是對 SQL 語句的一個包裝,或許進(jìn)行了某種優(yōu)化如預(yù)編譯。我們不能像寫 SQL Server 存儲過程那樣使用多重操作,事務(wù),邏輯判斷,循環(huán)等等……
wwww.iTbulo.combJJXD



 但是我們使用 Access 存儲過程的主要目的,就是使用參數(shù)額外提供的查詢,使用存儲過程,我們不必再面對將參數(shù)值拼接到 SQL 語句字符串中時遇到的各種麻煩,比如:

  代碼:
  --------------------------------------------------------------------------------
  Dim sql
  sql = "SELECT * FROM Users WHERE UserName = '" & userName & "'"
  --------------------------------------------------------------------------------

  以上代碼中,如果字符串變量 userName 中含有“'”單引號,則會報(bào)錯。我們必須手工轉(zhuǎn)化:

  代碼:
  --------------------------------------------------------------------------------
  Dim sql
  sql = "SELECT * FROM Users WHERE UserName = '" & Replace(userName, "'", "''")
  & "'" '轉(zhuǎn)化為連續(xù)兩個單引號
  --------------------------------------------------------------------------------

  而使用帶參數(shù)查詢,我們的 SQL 語句可以寫為:

  代碼:
  --------------------------------------------------------------------------------
  Dim sql
  sql = "SELECT * FROM Users WHERE UserName = @userName"
  --------------------------------------------------------------------------------

  然后把參數(shù) @userName 的值以 Command 對象的 Parameter 屬性來傳入即可,很方便直觀。

  代碼:
  --------------------------------------------------------------------------------
  With cmd
  '創(chuàng)建參數(shù)對象
  .Parameters.Append .CreateParameter("@userName")

  '給各參數(shù)指定值
  .Parameters("@userName") = userName
  End With
  --------------------------------------------------------------------------------

  這里還要說明 Access 存儲過程中參數(shù)的使用。和 SQL Server 的存儲過程中用 @ 變量指定參數(shù),然后同名傳入?yún)?shù)對象不同,Access 中的參數(shù),是以“順序”而非“名字”來識別的。傳入的參數(shù)無需指定名字,隨便起,SQL 中的參數(shù)名字也可以隨便起,只要傳入?yún)?shù)值時,按照 SQL 語句中的參數(shù)出現(xiàn)順序指定就行了。通常,我們使用 Command 對象的 Execute 方法,直接傳入?yún)?shù)值數(shù)組來執(zhí)行~

  代碼:
  --------------------------------------------------------------------------------
  cmd.Execute , Array(userName)
  --------------------------------------------------------------------------------

  再比如,你的一個 Access 存儲過程這么寫:

  代碼:
  --------------------------------------------------------------------------------
  select * from Users where UserName = p_UserName and BookTitle = p_bookTitle
  --------------------------------------------------------------------------------

  你可以就這么執(zhí)行,通過傳入?yún)?shù)值數(shù)組,但是順序要對應(yīng):

  代碼:
  --------------------------------------------------------------------------------
  cmd.Execute , Array(userName, bookTitle)
  --------------------------------------------------------------------------------

  OK,看看我們的例子中使用的兩個查詢,一個是寫入數(shù)據(jù)。寫好 SQL 語句后存并命名。
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  另一個讀取數(shù)據(jù)的存儲過程代碼。
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


使用存儲過程

然后我們可以在 ASP 程序中調(diào)用這些存儲過程了。

  這里可以看到為什么我說 Access 中的查詢就是它的存儲過程――我們的 Command 對象的 CommandType 屬性設(shè)置的是 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


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

  運(yùn)行結(jié)果。
wwww.iTbulo.combJJXD

wwww.iTbulo.combJJXD


  感覺起來,速度似乎很快,呵呵~

  不知道這樣在 Access 中使用存儲過程的意義大不大,不過確實(shí)很好玩
wwww.iTbulo.combJJXD


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久久综合激的五月天 | 夜噜噜久久国产欧美日韩精品 | 欧美一区二区国产 | 久久欧美| 黄色网页免费看 | 日韩在线视频网站 | 欧美精品在线播放 | 99re在线视频精品 | 亚洲免费三区 | 国产精品视频一二区 | 国产精品一区二区免费 | 日韩午夜视频在线观看 | 国产精品久久久久久久久久久免费看 | 九九99久久 | 麻豆精品国产 | 免费精品国产的网站免费观看 | 久久久久97 | 久久精选视频 | 三级av在线 | 国产一区二区三区免费观看在线 | 毛片免费不卡 | 黄色成人美女网站 | 韩日av片| 成人在线 | 亚洲精品视频成人 | 国产专区视频 | 国产在线一区二区三区视频 | 一区二区三区中文 | 国产成人久久 | 99热| 久久视频一区二区 | 日本黄色网址大全 | 日本公妇乱淫免费视频一区三区 | 欧美日韩国产在线一区 | 中文字幕久久精品 | 狠狠影院| 在线免费黄色小视频 | 91久久精品一区 | 国产精品久久久久久久久久久免费看 | 成人午夜视频在线观看 | 亚洲综合在线免费 |