在 VB .NET 中使用 MS Access 存儲過程 — 第 二 部份 作者: David Wasserman," name="description" />

在VB.NET中使用MSAccess存儲過程—第二部份

發表于:2007-05-25來源:作者:點擊數: 標簽:MSAccessVB.NET過程存儲使用
MI LY: SimSun; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: Arial; mso-fareast-language: ZH-CN">在 VB .NET 中使用 MS Access 存儲過程 — 第 二 部份 作者: David Wasserman,
MILY: SimSun; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: Arial; mso-fareast-language: ZH-CN">在VB.NET中使用MS Access存儲過程 部份

作者:

譯者:Qianqian
5/10/2002

文章源代碼: msaccess_sp2.zip

介紹

歡迎來到MS Access存儲過程的第二部分討論。第一部分詳細地描述了如何使用ADO.NET和Visual Basic.NET在Access中創建存儲過程. 第二部分將會示范如何通過數據庫訪問層訪問在第一部分已經創建的存儲過程,你可以模仿它并且用在自己的應用程序里。這篇文章會詳細地描述如何使用Visual Basic.NET實現數據庫的訪問層。

數據庫層的主要目的是通過類模塊提供一個訪問數據庫的網關。這個類模塊將充當數據庫和應用程序之間的粘合劑。利用數據庫訪問層來訪問數據庫有2個優點:你可以有改變你的后臺數據庫技術(從Access改到SQL Server)而不影響應用系統的能力。你還能夠通過在應用程序和數據庫訪問層之間增加一個控制層,來保證傳過去的數據是“純凈”的。在.NET里,數據庫訪問層通常會包括一個遵循面向對象規范的類模塊,而Visual Basic 的較早的版本會使用一個標準模塊來處理。

數據庫訪問層 - 代碼

現在該是我們卷起袖子來看一些代碼的時候了。在添加一個空類以后的第一件事情,就是列出這里需要使用的.NET類庫,如下所示:

Imports System
Imports System.Data
Imports System.Data.OleDb

System 庫 對大多數程序來說是標準的, 但是我把它作為一個習慣,在所有的代碼中都包含這個類庫。而System.Data 庫則是一個對于大多數數據庫訪問程序都需要的庫。System.Data.OleDb 將用在訪問Access所需要的OLE DB Provider。如果我們需要使用SQL Server,則我們最好使用定制的SQL Provider System.Data.SqlClient.

下一行開始了類的定義:

Public Class DBTier

這里我們定義類名為 DBTier, 并且給他Public 修飾符, 因此它將可以被其他代碼模塊訪問。在類定義以后,將聲明所有要用到的屬性。

Shared connectionString As String = _
    "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program " _
    & "Files\Microsoft Office\Office10\Samples\Northwind.mdb"

這里只聲明了一個String屬性,connectionString. 這個變量保存了 Northwind Access數據庫的連接字符串。聲明這個變量為Shared,說明它是一個“類變量(Class Variable)”,一個class variable是和類關聯的,二不是和這個類產生的每個對象相關聯。(譯者:VB.Net的Shared 修飾符相當于C++或C#的Static修飾符)

在連接字符串的定義之后,你可以看到這里有3個過程和1個函數。函數返回了一個包含所有產品列表的dataset。它調用了在第一部分已經創建的存儲過程 procProductsList.

然后你可以看到3個過程。他們對應于每個存儲過程,用于增加、刪除、修改產品;它們都有類似的結構; 每個使用了一個command,并聲明了連接對象和必須的參數。 作為一個例子, 我們來分開討論ProductsDeleteItem過程。理解了這個過程,其他2個就很容易消化了.

一開始,這個過程使用了一個參數, ProductID, 表示需要刪除的產品的ID。

Sub ProductsDeleteItem(ByVal ProductID As Integer)

接著,聲明了所有的變量. 分別用于存儲過程將要使用的connection,command和parameter. 這個參數就是需要刪除的那格產品ID.

Dim con As OleDbConnection
Dim cmd As OleDbCommand = New OleDbCommand()
Dim paramProductID As New OleDbParameter()

Command和connection的初始化:

con = New OleDbConnection(connectionString)
cmd.Connection = con

確認了paramProductID 參數的屬性,然后這個參數被添加到Command對象. 在這個例子中,要用到存儲過程里的參數名字是inProductID, 它是一個整型變量,并用函數的參數進行賦值。

With paramProductID
    .ParameterName = "inProductID"
    .OleDbType = OleDbType.Integer
    .Size = 4
    .Value = ProductID
End With
cmd.Parameters.Add(paramProductID)

最后一步是真正調用存儲過程.

cmd.CommandText = "EXECUTE procProductsDeleteItem"
con.Open()
cmd.ExecuteNonQuery()
con.Close()

注意connection對象這里只在需要執行存儲過程的時候保留,然后就馬上關閉了。這將減少可能有的資源占用。

雖然這個例子中使用的DBTier類已經清楚的介紹了如何使用Access存儲過程, 它的功能仍然需要更多的增強來達到產品級的水平。因為沒有錯誤處理。他仍然需要更多的強化。

本文的源代碼包括了DBTier.vb,這個文件同時包含了一些簡單的Form來測試類的實現。

總而言之,我希望您至少通過這些文章獲得了2個信息:一個是在Microsoft Access中存儲過程是存在的并且是不錯的, 雖然有不足。第二個你需要同時理解需要把應用程序的數據庫訪問分解到獨立的類、函數、過程里面,這將使軟件的維護和升級變得更加容易。

完整的DBTier.vb:

Imports System
Imports System.Data
Imports System.Data.OleDb

' Functions and subroutines for executing Stored Procedures in Access.
Public Class DBTier

    ' Change Data Source to the location of Northwind.mdb on your local 
    ' system.
    Shared connectionString As String = _
        "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program " _
        & "Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    ' This function returns a dataset containing all records in
    ' the Products Table.
    Function ProductsList() As DataSet
        Dim con As OleDbConnection
        Dim da As OleDbDataAdapter
        Dim ds As DataSet
        Dim sSQL As String


        sSQL = "EXECUTE procProductsList"

        con = New OleDbConnection(connectionString)
        da = New OleDbDataAdapter(sSQL, con)
        ds = New DataSet()
        da.Fill(ds, "Products")

        Return ds

    End Function

    ' This Function adds one record to the Products table.
    Sub ProductsAddItem(ByVal ProductName As String, _
        ByVal SupplierID As Integer, ByVal CategoryID As Integer)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand()
        Dim paramProductName As New OleDbParameter()
        Dim paramSupplierID As New OleDbParameter()
        Dim paramCategoryID As New OleDbParameter()

        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramProductName
            .ParameterName = "inProductName"
            .OleDbType = OleDbType.VarChar
            .Size = 40
            .Value = ProductName
        End With
        cmd.Parameters.Add(paramProductName)

        With paramSupplierID
            .ParameterName = "inSupplierID"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = SupplierID
        End With
        cmd.Parameters.Add(paramSupplierID)

        With paramCategoryID
            .ParameterName = "inCategoryID"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = CategoryID
        End With
        cmd.Parameters.Add(paramCategoryID)

        cmd.CommandText = "EXECUTE procProductsAddItem"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

    ' This function Updates a specific JobTitle Record with new data.
    Sub ProductsUpdateItem(ByVal ProductID As Integer, _
        ByVal ProductName As String)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand()
        Dim paramProductName As New OleDbParameter()
        Dim paramProductID As New OleDbParameter()

        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramProductID
            .ParameterName = "inProductID"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = ProductID
        End With
        cmd.Parameters.Add(paramProductID)

        With paramProductName
            .ParameterName = "inProductName"
            .OleDbType = OleDbType.VarChar
            .Size = 40
            .Value = ProductName
        End With
        cmd.Parameters.Add(paramProductName)

        cmd.CommandText = "EXECUTE procProductsUpdateItem"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

    ' This function deletes one record from the Products table.
    Sub ProductsDeleteItem(ByVal ProductID As Integer)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand()
        Dim paramProductID As New OleDbParameter()

        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramProductID
            .ParameterName = "inProductID"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = ProductID
        End With
        cmd.Parameters.Add(paramProductID)

        cmd.CommandText = "EXECUTE procProductsDeleteItem"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

End Class

原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97