亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在 Access 中使用“存儲過程”

2019-11-18 19:57:15
字體:
來源:轉載
供稿:網友

我們已經熟悉在 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 代碼

好,下面先看看我們這個簡單的例子中所使用的數據庫的表結構。

然后在 Access 主界面上點擊左側的“查詢”按鈕,再在右邊雙擊“在設計視圖中創建查詢”,以打開查詢設計視圖。

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

添加表之后,在設計視圖上點擊鼠標右鍵,選擇“SQL 視圖”,以切換到 SQL 代碼編輯窗口。

好,下面說說 Access 的存儲過程的特點。

Access 的查詢,我目前的感覺是對 SQL 語句的一個包裝,或許進行了某種優化如預編譯。我們不能像寫 SQL Server 存儲過程那樣使用多重操作,事務,邏輯判斷,循環等等……

但是我們使用 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 語句后保存并命名。

另一個讀取數據的存儲過程代碼。

(二)使用存儲過程

然后我們可以在 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
    .ActiveConnection = conn
    .CommandType = &H0004 '存儲過程
    .CommandText = "AddNewData"
End With

cmd.Execute , Array(CStr(Now()), CSng(s))

With cmd
    .ActiveConnection = conn
    .CommandType = &H0004 '存儲過程
    .CommandText = "GetData"
End With

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

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

Set resultRS = Nothing
Set cmd = Nothing
conn.Close
Set conn = Nothing

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>"
%>

 

運行結果。

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

不知道這樣在 Access 中使用存儲過程的意義大不大,不過確實很好玩

ASP 正在沒落,不過我仍然很喜歡它的小快靈~

參考資料:

http://aspalliance.com/andrewmooney/default.aspx?article=16

http://support.microsoft.com/default.aspx?scid=kb;EN-US;304352


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久久久av一区| 日韩在线欧美在线| 麻豆精品精华液| 91色中文字幕| 国产精品a久久久久久| 亚洲无线码在线一区观看| 97超级碰碰人国产在线观看| 午夜精品一区二区三区在线视频| 精品久久久久久亚洲国产300| 成人激情av在线| 国产极品精品在线观看| 日韩精品免费在线| 日韩免费高清在线观看| 日本成人黄色片| 精品国产乱码久久久久久婷婷| 欧美激情欧美激情| 亚洲一区亚洲二区| 欧美日韩在线观看视频| 欧洲精品毛片网站| 国产欧美婷婷中文| 麻豆国产精品va在线观看不卡| 亚洲国产欧美一区二区丝袜黑人| 精品欧美一区二区三区| 日韩亚洲第一页| 国产一区二区三区在线视频| 国产亚洲精品久久久久久牛牛| 精品一区二区三区电影| 色偷偷888欧美精品久久久| 成人欧美一区二区三区黑人孕妇| 欧美一区二三区| 成人黄色免费看| 最近日韩中文字幕中文| 亚洲国产精品人人爽夜夜爽| 久久久国产视频| 欧美裸体男粗大视频在线观看| y97精品国产97久久久久久| 日韩有码片在线观看| 亚洲成人黄色网| 91精品在线看| 欧美巨大黑人极品精男| 影音先锋欧美精品| 国产偷亚洲偷欧美偷精品| 亚洲国产精品免费| 久久久久久亚洲精品中文字幕| 精品久久久久久| 成人精品一区二区三区电影黑人| 91精品久久久久久久| 亚洲天堂成人在线视频| 亚洲国产精品国自产拍av秋霞| 欧美极品少妇与黑人| 亚洲人成亚洲人成在线观看| 日韩中文字幕在线| 欧美一级黑人aaaaaaa做受| 亚洲一区www| 亚洲综合在线做性| 久久影视电视剧凤归四时歌| 欧美日韩中文字幕日韩欧美| 亚洲日本成人网| 国产精品福利网| 日韩精品免费一线在线观看| wwwwwwww亚洲| 久久精品国产清自在天天线| 国产一区二区三区直播精品电影| 97精品一区二区视频在线观看| 麻豆成人在线看| 亚洲天堂免费在线| 成人福利免费观看| 91超碰中文字幕久久精品| 欧美猛交ⅹxxx乱大交视频| 国产欧美日韩视频| 中国日韩欧美久久久久久久久| 欧美一级黑人aaaaaaa做受| 亚洲国产成人久久| 91精品视频免费看| 亚洲国产天堂久久国产91| 久久精品中文字幕一区| 日韩美女中文字幕| 欧美成人免费网| 中文字幕亚洲第一| 亚洲国产婷婷香蕉久久久久久| 在线免费看av不卡| 亚洲精品白浆高清久久久久久| 国产精品激情av电影在线观看| 久久久久国产一区二区三区| 国产成人在线精品| 欧美日韩国产精品一区二区三区四区| 久久这里只有精品视频首页| 欧洲成人免费aa| 亚洲精品日韩久久久| 岛国视频午夜一区免费在线观看| 日韩av在线一区| 国产亚洲欧洲高清| 国产视频久久久久久久| 亚洲人午夜精品免费| 欧美裸体xxxx| 欧美另类极品videosbest最新版本| 美日韩精品视频免费看| 欧美久久精品一级黑人c片| 日韩最新中文字幕电影免费看| 九九视频直播综合网| 国产日韩换脸av一区在线观看| 在线精品播放av| 欧美精品18videosex性欧美| 国产精品电影一区| 性欧美亚洲xxxx乳在线观看| 91国偷自产一区二区三区的观看方式| www国产精品视频| 另类图片亚洲另类| 中文字幕日韩精品有码视频| 国产小视频国产精品| 中文欧美日本在线资源| 精品无人区太爽高潮在线播放| 亚洲一区二区在线播放| 日韩av在线影视| 亚洲欧美制服丝袜| 久久躁狠狠躁夜夜爽| 久久频这里精品99香蕉| 日韩av三级在线观看| 亚洲色图色老头| 国产精品最新在线观看| 国内外成人免费激情在线视频网站| 亚洲级视频在线观看免费1级| 午夜剧场成人观在线视频免费观看| 在线视频中文亚洲| 国产视频一区在线| 九九热视频这里只有精品| 成人av在线亚洲| 国产在线视频2019最新视频| 97精品在线观看| 久久精品国产成人| 啪一啪鲁一鲁2019在线视频| 最近中文字幕日韩精品| 国产日产欧美精品| 4p变态网欧美系列| 久久成人18免费网站| www国产精品视频| 中文字幕日韩电影| 在线精品91av| 亚洲女人天堂av| 精品久久久久久久久久| 亚洲国产精品大全| 国产精品h片在线播放| 人体精品一二三区| 亚洲成色777777女色窝| 91av成人在线| 中文字幕亚洲自拍| 成人性教育视频在线观看| 一区二区三区久久精品| 色妞色视频一区二区三区四区| 日韩在线播放av| 久久久久久久久久婷婷| 亚洲精品国产精品国自产观看浪潮| 亚洲男人天堂手机在线| 国产欧美精品一区二区| 亚洲精品免费在线视频| 久久久国产在线视频| 欧美大片在线免费观看| 欧美精品电影免费在线观看| 国产精品视频免费在线观看| 亚洲电影免费在线观看| 欧美黑人一区二区三区| 亚洲丁香婷深爱综合| www.99久久热国产日韩欧美.com| 97成人精品区在线播放|