本演练提供基本的端到端 LINQ to SQL 方案,用于仅使用存储过程访问数据。 数据库管理员通常使用此方法来限制数据存储的访问方式。
注释
你还可以在 LINQ to SQL 应用程序中使用存储过程来重写默认行为,尤其是 Create
、Update
和 Delete
进程的默认行为。 有关详细信息,请参阅 自定义插入、更新和删除操作。
在本演练中,你将使用两种方法,这些方法已映射到 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 解决方案
在 Visual Studio 文件 菜单上,单击“ 新建项目”。
在“新建项目”对话框的“项目类型”窗格中,展开 Visual Basic,然后单击“Windows”。
在 “模板 ”窗格中,单击 “Windows 窗体应用程序”。
在 “名称 ”框中,键入 SprocOnlyApp。
单击 “确定” 。
Windows 窗体设计器随即打开。
添加 LINQ to SQL 程序集引用
标准 Windows 窗体应用程序模板中不包括 LINQ to SQL 程序集。 您将需要按照以下步骤中的说明自行添加此程序集:
添加 System.Data.Linq.dll
在 解决方案资源管理器中,单击“ 显示所有文件”。
在解决方案资源管理器中,右键点击引用,然后点击添加引用。
在“ 添加引用 ”对话框中,单击 .NET,单击 System.Data.Linq 程序集,然后单击“ 确定”。
此程序集即被添加到项目中。
将 Northwind 代码文件添加到项目
此步骤假定你已使用 SqlMetal 工具从 Northwind 示例数据库生成代码文件。 有关详细信息,请参阅本演练前面的先决条件部分。
将 “northwind” 代码文件添加到项目中
在 项目 菜单上,单击 添加现有项。
在 “添加现有项 ”对话框中,移动到 c:\linqtest3\northwind.vb,然后单击“ 添加”。
northwind.vb文件将添加到项目中。
创建数据库连接
在此步骤中,定义与 Northwind 示例数据库的连接。 本演练使用“c:\linqtest3\northwnd.mdf”作为路径。
创建数据库连接
在 解决方案资源管理器中,右键单击 Form1.vb,然后单击“ 查看代码”。
Class Form1
显示在代码编辑器中。在
Form1
代码块中输入以下代码:Dim db As New Northwnd("c:\linqtest3\northwnd.mdf")
设置用户界面
在此任务中,你将创建一个接口,以便用户可以执行存储过程来访问数据库中的数据。 在使用此演练开发的应用程序中,用户只能使用应用程序中嵌入的存储过程访问数据库中的数据。
设置用户界面
返回到 Windows 窗体设计器(Form1.vb[设计])。
在“视图”菜单上,单击“工具箱”。
工具箱随即打开。
注释
单击“自动隐藏”图钉,以使工具箱在你执行本节中剩余步骤的过程中保持打开。
将工具箱中的两个按钮、两个文本框和两个标签拖到 Form1 上。
按照随附插图中的说明排列控件。 展开 Form1 ,使控件易于适应。
右键单击 Label1,然后单击“ 属性”。
将 Text 属性从 Label1 更改为 Enter OrderID:。
与 Label2 的相同方式,将 Text 属性从 Label2 更改为 Enter CustomerID:。
同样,将 Button1 的 Text 属性更改为“订单详细信息”。
将 Button2 的 Text 属性更改为“订单历史记录”。
扩大按钮控件,使所有文本可见。
处理按钮单击
双击 Form1 上的“订单详细信息”以创建
Button1
事件处理程序并打开代码编辑器。在
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 = ""
现在双击 Form1 上的 Button2 以创建
Button2
事件处理程序并打开代码编辑器。在
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返回订购产品的历史记录。
测试应用程序
按 F5 开始调试。
此时会显示 Form1。
在 “Enter OrderID ”框中,键入 10249 ,然后单击“ 订单详细信息”。
消息框列出了 10249 订单中包含的产品。
单击“ 确定” 关闭消息框。
在 “输入 CustomerID ”框中,键入
ALFKI
,然后单击“ 订单历史记录”。消息框列出了客户 ALFKI 的订单历史记录。
单击“ 确定” 关闭消息框。
在 “Enter OrderID ”框中,键入
123
,然后单击“ 订单详细信息”。消息框显示“无结果”。
单击“ 确定” 关闭消息框。
在 “调试 ”菜单上,单击“ 停止调试”。
调试会话将关闭。
如果已完成试验,可以在“文件”菜单上单击“关闭项目”,并在系统提示时保存项目。
后续步骤
可以通过进行一些更改来增强此项目。 例如,可以在列表框中列出可用的存储过程,并让用户选择要执行哪些过程。 您还可以将报告的输出以流的方式传输到文本文件。