演练:仅使用存储过程 (Visual Basic)

本演练提供基本的端到端 LINQ to SQL 方案,用于仅使用存储过程访问数据。 数据库管理员通常使用此方法来限制数据存储的访问方式。

注释

你还可以在 LINQ to SQL 应用程序中使用存储过程来重写默认行为,尤其是 CreateUpdateDelete 进程的默认行为。 有关详细信息,请参阅 自定义插入、更新和删除操作

在本演练中,你将使用两种方法,这些方法已映射到 Northwind 示例数据库中的存储过程:CustOrdersDetail 和 CustOrderHist。 运行 SqlMetal 命令行工具生成 Visual Basic 文件时,会发生映射。 有关详细信息,请参阅本演练后面的“先决条件”部分。

本演练不依赖于对象关系设计器。 使用 Visual Studio 的开发人员还可以使用 O/R 设计器来实现存储过程功能。 请参阅 Visual Studio 中的 LINQ to SQL 工具

注释

计算机可能会在以下说明中显示某些 Visual Studio 用户界面元素的不同名称或位置。 你拥有的 Visual Studio 版本以及所使用的设置决定了这些元素。 有关更多信息,请参阅 自定义 IDE

本演练是使用 Visual Basic 开发设置编写的。

先决条件

本演练需要如下内容:

  • 本演练使用专用文件夹(“c:\linqtest3”)保存文件。 在开始演练之前创建此文件夹。

  • Northwind 示例数据库。

    如果开发计算机上没有此数据库,可以从Microsoft下载站点下载它。 有关说明,请参阅 下载示例数据库。 下载数据库后,将northwnd.mdf文件复制到 c:\linqtest3 文件夹。

  • 从 Northwind 数据库生成的 Visual Basic 代码文件。

    本演练使用 SqlMetal 工具并通过以下命令行编写:

    sqlmetal /code:“c:\linqtest3\northwind.vb” /language:vb “c:\linqtest3\northwnd.mdf” /sprocs /functions /pluralize

    有关详细信息,请参阅 SqlMetal.exe(代码生成工具)

概述

本演练由六个主要任务组成:

  • 在 Visual Studio 中设置 LINQ to SQL 解决方案。

  • 将 System.Data.Linq 程序集添加到项目。

  • 将数据库代码文件添加到项目。

  • 创建与数据库的连接。

  • 设置用户界面。

  • 运行并测试应用程序。

创建 LINQ to SQL 解决方案

在此第一个任务中,你将创建一个 Visual Studio 解决方案,其中包含生成和运行 LINQ to SQL 项目所需的引用。

创建 LINQ to SQL 解决方案

  1. 在 Visual Studio 文件 菜单上,单击“ 新建项目”。

  2. 在“新建项目”对话框的“项目类型”窗格中,展开 Visual Basic,然后单击“Windows”。

  3. “模板 ”窗格中,单击 “Windows 窗体应用程序”。

  4. “名称 ”框中,键入 SprocOnlyApp

  5. 单击 “确定”

    Windows 窗体设计器随即打开。

添加 LINQ to SQL 程序集引用

标准 Windows 窗体应用程序模板中不包括 LINQ to SQL 程序集。 您将需要按照以下步骤中的说明自行添加此程序集:

添加 System.Data.Linq.dll

  1. 解决方案资源管理器中,单击“ 显示所有文件”。

  2. 解决方案资源管理器中,右键点击引用,然后点击添加引用

  3. 在“ 添加引用 ”对话框中,单击 .NET,单击 System.Data.Linq 程序集,然后单击“ 确定”。

    此程序集即被添加到项目中。

将 Northwind 代码文件添加到项目

此步骤假定你已使用 SqlMetal 工具从 Northwind 示例数据库生成代码文件。 有关详细信息,请参阅本演练前面的先决条件部分。

将 “northwind” 代码文件添加到项目中

  1. 项目 菜单上,单击 添加现有项

  2. “添加现有项 ”对话框中,移动到 c:\linqtest3\northwind.vb,然后单击“ 添加”。

    northwind.vb文件将添加到项目中。

创建数据库连接

在此步骤中,定义与 Northwind 示例数据库的连接。 本演练使用“c:\linqtest3\northwnd.mdf”作为路径。

创建数据库连接

  1. 解决方案资源管理器中,右键单击 Form1.vb,然后单击“ 查看代码”。

    Class Form1 显示在代码编辑器中。

  2. Form1 代码块中输入以下代码:

    Dim db As New Northwnd("c:\linqtest3\northwnd.mdf")
    

设置用户界面

在此任务中,你将创建一个接口,以便用户可以执行存储过程来访问数据库中的数据。 在使用此演练开发的应用程序中,用户只能使用应用程序中嵌入的存储过程访问数据库中的数据。

设置用户界面

  1. 返回到 Windows 窗体设计器(Form1.vb[设计])。

  2. 在“视图”菜单上,单击“工具箱”

    工具箱随即打开。

    注释

    单击“自动隐藏”图钉,以使工具箱在你执行本节中剩余步骤的过程中保持打开。

  3. 将工具箱中的两个按钮、两个文本框和两个标签拖到 Form1 上。

    按照随附插图中的说明排列控件。 展开 Form1 ,使控件易于适应。

  4. 右键单击 Label1,然后单击“ 属性”。

  5. Text 属性从 Label1 更改为 Enter OrderID:

  6. Label2 的相同方式,将 Text 属性从 Label2 更改为 Enter CustomerID:

  7. 同样,将 Button1Text 属性更改为“订单详细信息”。

  8. Button2Text 属性更改为“订单历史记录”。

    扩大按钮控件,使所有文本可见。

处理按钮单击

  1. 双击 Form1 上的“订单详细信息”以创建Button1事件处理程序并打开代码编辑器。

  2. Button1 处理程序中输入以下代码:

    ' Declare a variable to hold the contents of
    ' TextBox1 as an argument for the stored
    ' procedure.
    Dim parm As String = TextBox1.Text
    
    ' Declare a variable to hold the results returned
    ' by the stored procedure.
    Dim custQuery = db.CustOrdersDetail(parm)
    
    ' Clear the message box of previous results.
    Dim msg As String = ""
    Dim response As MsgBoxResult
    
    ' Execute the stored procedure and store the results.
    For Each custOrdersDetail As CustOrdersDetailResult In custQuery
        msg &= custOrdersDetail.ProductName & vbCrLf
    Next
    
    ' Display the results.
    If msg = "" Then
        msg = "No results."
    End If
    response = MsgBox(msg)
    
    ' Clear the variables before continuing.
    parm = ""
    TextBox1.Text = ""
    
  3. 现在双击 Form1 上的 Button2 以创建 Button2 事件处理程序并打开代码编辑器。

  4. Button2 处理程序中输入以下代码:

    ' Comments in the code for Button2 are the same
    ' as for Button1.
    Dim parm As String = TextBox2.Text
    
    Dim custQuery2 = db.CustOrderHist(parm)
    Dim msg As String = ""
    Dim response As MsgBoxResult
    
    For Each custOrdHist As CustOrderHistResult In custQuery2
        msg &= custOrdHist.ProductName & vbCrLf
    Next
    
    If msg = "" Then
        msg = "No results."
    End If
    
    response = MsgBox(msg)
    parm = ""
    TextBox2.Text = ""
    

测试应用程序

现在是时候测试应用程序了。 请注意,您与数据存储的接触仅限于两个存储过程可以采取的任何操作。 这些动作是针对输入的任何订单ID返回包含的产品,或针对输入的任何客户ID返回订购产品的历史记录。

测试应用程序

  1. 按 F5 开始调试。

    此时会显示 Form1。

  2. “Enter OrderID ”框中,键入 10249 ,然后单击“ 订单详细信息”。

    消息框列出了 10249 订单中包含的产品。

    单击“ 确定” 关闭消息框。

  3. “输入 CustomerID ”框中,键入 ALFKI,然后单击“ 订单历史记录”。

    消息框列出了客户 ALFKI 的订单历史记录。

    单击“ 确定” 关闭消息框。

  4. “Enter OrderID ”框中,键入 123,然后单击“ 订单详细信息”。

    消息框显示“无结果”。

    单击“ 确定” 关闭消息框。

  5. “调试 ”菜单上,单击“ 停止调试”。

    调试会话将关闭。

  6. 如果已完成试验,可以在“文件”菜单上单击“关闭项目”,并在系统提示时保存项目。

后续步骤

可以通过进行一些更改来增强此项目。 例如,可以在列表框中列出可用的存储过程,并让用户选择要执行哪些过程。 您还可以将报告的输出以流的方式传输到文本文件。

另请参阅