转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
在VB.NET中使用MS Access存储过程 — 第一部份         ★★★★

在VB.NET中使用MS Access存储过程 — 第一部份

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1624 更新时间:2009/4/23 19:01:01

 


在VB.NET中使用MS Access存储过程 — 第一部份



作者: DavidWasserman,MCP
2/27/2002

译者:Qianqian
3/8/2002


文章源代码: msaccess_ sp.zip


介绍


最新发布的MS Access中,微软已经尽努力使这种产品成为一个真正全功能的关系数据库系统。 存储过程,一个通常和企业数据库系统例如SQLServer相关的功能,现在也可以在Access里找到了。 自从Access2000以来,Access已经具备了存储过程的功能,而且是Jet 4 Database Engine自带的。如果你习惯于在SQL SERVER里使用存储过程,那么你就会很熟悉它们如何在Access里使用。 但是要记住有一些限制。我会稍后作讨论。


这篇文章分成两个部份。 第一部份会详细描述如何在使用ADO.NET和Visual Basic.NET在Access里创建存储过程。 第二部份则会示范如何利用在第一部分创建的存储过程来创建一个数据访问层,并且在你自己的应用程序中使用。 这篇文章中的代码已经在Access2002种测试通过,即使如此,它也应该能运行于Access2000。


存储过程如何在Access里工作?


不像在Access里的其它的对象,存储过程没有用户界面,并且不能在Access的界面里创建。 要建立它们的方法只有编码。我将示范如何在ADO.NET中实现这些代码。


当一个存储过程被添加到Access数据库时,JET Engine会把存储过程转换到一个查询对象。 对一个Access开发者而言,这就象编写一个简单的查询,是不必要的工作。 然而,它确实有它的优点。考虑一下,一个应用系统必须为了分开Access版和SQL SERVER版而分成2个系统的情况吧。 使用存储过程会使为应用程序的数据库访问层写代码变得更容易,程序在不同的版本之间区别很小。


创建存储过程


为了示范,我会先显示如何使用SQL语句来创建存储过程。 在文章末尾我会给列出需要在数据库执行的所有语句的代码。 当使用和Access包含的Northwind数据库时,它会创建4个存储过程。 它们都集中于Prodcut表,让我们从最容易的那个开始: 选择表格里所有行的数据。 为了创建这个存储过程,在数据库执行下列SQL语句:


"CREATE PROC procProductsList AS SELECT * FROM Products;"


语句“CREATE PROC procCustomerList”是实际上创建存储过程的部份。 在”AS”下面的部分可以为任何有效的SQL语句。


经常性的,你会需要传递参数到存储过程去用于查询。 例如你可能想要根据某一个ProductID删除一个记录。 下列存储过程显示如何实现这个目的:


"CREATE PROC procProductsDeleteItem(inProductsID LONG)" & _
"AS DELETE FROM Products WHERE ProductsID = inProductsID;"


在第一行,注意CREATE PROC声明右边的括号。 有一个定义为长整型的参数。 这是需要你输入的变量,用于删除记录。


下项两个分开的语句显示了如何为Product表创建一个add和一个update储存过程。注意,为了文章的简短,过程中没有包括所有的字段:


"CREATE PROC procProductsAddItem(inProductName VARCHAR(40), " & _
"inSupplierID LONG, inCategoryID LONG) " & _
"AS INSERT INTO Products (ProductName, SupplierID, CategoryID) " & _
"Values (inProductName, inSupplierID, inCategoryID);"


"CREATE PROC procProductsUpdateItem(inProductID LONG, " & _
"                             inProductName VARCHAR(40)) " & _
"AS UPDATE Products SET ProductName = inProductName " & _
"    WHERE ProductID = inProductID; 


注意:当参数数量超过一个的时候,用逗号分开。


限制


在这里,你可能会碰到一些限制,尤其是如果当你已经非常习惯于SQL SERVER的强大功能的时候。


  • 不能使用输出参数。

  • 不要使用@字符。 @字符通常用于Transaction SQL( SQL SERVER),代表一个本地变量 。 Access不总是会转换这个字符, 有时会将它省略。这个问题可能导致很难找的BUG, 会使你多掉几把头发。

  • Access无法存取临时表。

  • 我怀疑在很多Transaction SQL里有的选项在Access里是没有的,因为它不是Transaction SQL兼容的。


结论


希望这篇文章能提供在一个几乎是Access的未公开领域的一些指引,而对JET引擎则没有多做探讨。 如果需要知道ADO.NET代码在 CreateStoredProc 子程序里是如何工作的更多信息,请参见Gurneet Singh 写的Getting Started with ADO.NET。 下面是在这篇文章里用到的所有代码的完整列表:


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

Module CreateSP

    Sub Main()

        ProductsProcs()

    End Sub

    '''' Products Stored Procs to be added to the db.
    Sub ProductsProcs()
        Dim sSQL As String

        '''' procProductsList - Retrieves entire table
        sSQL = "CREATE PROC procProductsList AS SELECT * FROM Products;"
        CreateStoredProc(sSQL)

        '''' procProductsDeleteItem - Returns the details (one record) from the 
        '''' JobTitle table
        sSQL = "CREATE PROC procProductsDeleteItem(@ProductID LONG) AS " _
            & "DELETE FROM Products WHERE ProductID = @ProductID;"
        CreateStoredProc(sSQL)

        '''' procProductsAddItem - Add one record to the JobTitle table
        sSQL = "CREATE PROC procProductsAddItem(inProductName VARCHAR(40), " _
            & "inSupplierID LONG, inCategoryID LONG) AS INSERT INTO " _
            & "Products (ProductName, SupplierID, CategoryID) Values " _
            & "(inProductName, inSupplierID,   CategoryID);"
        CreateStoredProc(sSQL)

        '''' procProductsUpdateItem - Update one record on the JobTitle table
        sSQL = "CREATE PROC procProductsUpdateItem(inProductID LONG, " _
            & "inProductName VARCHAR(40)) AS UPDATE Products SET " _
            & "ProductName = inProductName WHERE ProductID = inProductID;"
        CreateStoredProc(sSQL)


    End Sub

    '''' Execute the creation of Stored Procedures

[1] [2]  下一页


[VB.NET程序]在VB.NET中使用MS Access存储过程 — 第二部份  [Web开发]基于Web标准的UI组件 — 菜单(1)
[Web开发]浅谈ADO.NET文章系列之二 — 并发更新冲突的处理  [ORACLE]Oracle9i — 电子商务平台 (关键字:ORACLE电子商…
[演讲致辞]欧盟习惯法中的比例原则 — 德国法的贡献  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台