若要完成本演练,您需要: 访问带有 Pubs SQL Server 示例数据库的服务器。 演练被分成若干较小的部分: 创建 Windows 窗体。 创建并配置将要针对其绑定窗体的数据集。这包括创建一个通过数据库填充数据集的查询。 向窗体添加 DataGrid 控件,并将其绑定到数据。 添加代码来填充数据集。 添加将数据集更改发送回数据库的代码。
如果已经有打开的解决方案,请从“文件”菜单中选择“关闭解决方案”。 在“项目类型”窗格中,选择“Visual Basic 项目”、“Visual C# 项目”或“Visual C++ 项目”。 在“模板”窗格中,选择“Windows 应用程序”(如果是 Visual Basic 和 Visual C# 项目),或者选择“Windows 窗体应用程序 (.NET)”(如果是 Visual C++ 项目)。 赋予项目符合所使用的命名规则的唯一名称。例如,可以将此项目命名为 Walkthrough_Simple1。 当分配名称并指定新的解决方案后,请单击“确定”。 Visual Studio 创建一个新项目,并在 Windows 窗体设计器中显示新窗体。
在本演练中,您将向窗体添加数据集。不过,并不因为该数据集尚不存在,您就手动向窗体添加该数据集。您应执行的是如下步骤: 使用向导创建数据适配器。该适配器包含用于读取和写入数据库信息的 SQL 语句。该向导帮助您定义所需的 SQL 语句。如有必要,该向导还创建与数据库的连接。 生成数据集架构。在此过程中,您将让 Visual Studio 基于您正在访问的表和列创建一个新的类型化数据集类。在生成数据集类时,您还将向窗体中添加该类的一个实例。 遵循本节中的所有过程很重要。否则,窗体将不具有在本演练随后部分要使用的数据集。
有关数据适配器的更多信息,请参见数据适配器介绍。有关数据集的更多信息,请参见数据集介绍。
数据库安全性。从“工具箱”的“数据”选项卡中,将 OleDbDataAdapter 对象拖到窗体上。 SqlDataAdapter,它为用于 SQL Server 7.0 或更高版本进行了优化。在本演练中使用 OleDbDataAdapter,因为它更通用,可以提供对任何与 OLE DB 兼容的数据源的 ADO.NET 访问。“数据适配器配置向导”启动,它将帮助您创建连接和适配器。
在该向导中,执行下列操作: 在第二个窗格中,创建或选择一个指向 SQL Server Pubs 数据库的连接。 在第三个窗格中,指定您要使用 SQL 语句来访问数据库。 在第四个窗格中创建以下 SQL 语句:
为了便于生成 SQL 语句,请单击“查询生成器”以启动“查询生成器”。 单击“完成”完成该向导。 向导完成后,您将获得一个连接(在 Visual Basic 中为 OleDbConnection1,在 Visual C# 或 Visual C++ 中为 oleDbConnection1),该连接包含与如何访问数据库有关的信息。您还将拥有一个数据适配器(在 Visual Basic 中为 OleDbDataAdapter1,在 Visual C# 或 Visual C++ 中为 oleDbDataAdapter1),其中包含一个用于定义要访问数据库中哪个表和哪些列的查询。 先连接再有适配器
向导完成后,基于在该过程中创建的 SQL 查询生成数据集。有关更多信息,请参见下一节。
DataSet 类的实例,该架构描述类的元素(表、列和约束)。有关数据集与架构之间关系的更多信息,请参见 ADO.NET 数据访问介绍。
从“数据”菜单中选择“生成数据集”。
选择“新建”选项,将数据集命名为 dsAuthors。 在“选择要添加到数据集中的表”下面的列表中,应选择“authors”表。
确保“将此数据集添加到设计器”已选中,然后单击“确定”。 Visual Studio 生成某类型化数据集类 (dsAuthors) 和定义该数据集的架构。您将在“解决方案资源管理器”中看到新架构 (dsAuthors.xsd)。 最后,Visual Studio 将新数据集类的一个实例(DsAuthors1 或 dsAuthors1)添加到窗体中。
此时,已完成为从数据库中获取信息并将信息转移到数据集所需的全部设置。准备创建一个显示数据的窗体。
在本演练中,您将添加一个控件(即 DataGrid 控件),它可以同时显示数据集内的所有记录。另一个方法是使用文本框等单个控件一次显示一个记录。该策略随后会要求您向窗体添加导航功能。因此,为了简便起见,应将使用数据网格。
数据网格必须绑定到数据集才能显示数据。
如果尚未这样做,请单击当前窗口顶部的选项卡以切换到窗体设计器。 从“工具箱”的“Windows 窗体”选项卡中,将 DataGrid 控件拖到窗体上。 按 F4 键以显示“属性”窗口。 在 DataSource 属性中,选择 DsAuthors1(或 dsAuthors1)作为数据源。不选择 DsAuthors1.Authors(或 dsAuthors1.Authors)。 在 DataMember 属性中选择“authors”。 设置这两个属性会将 DsAuthors1 数据集内的 authors 数据表绑定到网格。
调整网格的大小,以便可以看到所有列。更改其高度,以便能够看到多个作者记录。 尽管数据网格被绑定到所创建的数据集,但是,数据集本身不会被自动填写。相反,您必须自己调用数据适配器方法来填充数据集。有关填充数据集的更多信息,请参见数据集介绍。
从“工具箱”的“Windows 窗体”选项卡中,将 Button 控件拖到窗体上。 将该按钮命名为 btnLoad,通过设置其 Text 属性将标题更改为“加载”。 双击该按钮以创建其 Click 事件的事件处理方法。 在该方法中,清除所创建的数据集,然后调用数据适配器的 Fill 方法,向该方法传递要填充的数据集。 下面的示例显示完整的方法:
但是,当使用数据集时,更新需要两个步骤。当数据在数据集内后,您仍必须将其从数据集发送到数据库。数据适配器可通过其 Update 方法完成此操作,该方法检查数据集内所指定数据表中的每个记录,如果某记录已更改,则向数据库发送相应的“更新”(Update)、“插入”(Insert) 或“删除”(Delete) 命令。有关更多信息,请参见数据集更新介绍。
在本演练中,将向窗体添加一个按钮,当用户想将其更新发送到数据库时,可以按该按钮。
从“工具箱”的“Windows 窗体”选项卡中,将 Button 控件拖到窗体上。 将该按钮命名为 btnUpdate,通过设置其 Text 属性将标题更改为“保存对数据库的更改”。 双击该按钮以创建其 Click 事件的事件处理方法。 在该方法中调用数据适配器的 Update 方法,向该方法传递数据集,该数据集包含要发送到数据库中的更新。使用“消息框”(MessageBox) 对象显示确认文本。 下面的示例显示完整的方法:
按 F5 键运行该窗体。 System.Data.SqlClient.SqlException 的异常,这很可能是由您的数据库登录凭据的保存方式导致的。有关纠正该问题的信息,请参见在运行时不能访问可在设计时访问的数据库。在窗体显示后,单击“加载”按钮。 在网格中显示一个作者列表。
对网格中的一个记录进行更改。 在移动到网格中的另一个记录时,所做更改将保留。请在心中记住所做更改。
再次单击“加载”按钮。 这将从数据库重新加载该数据集并刷新网格。注意,因为未将所做更改从数据集保存到数据库,所以您在第 3 步中所做的更改未被保留。
再次对网格中的一个记录进行更改。 单击“保存对数据库的更改”按钮。 将看到显示消息框,但网格中没有任何更改。
再次单击“加载”按钮从数据库重新加载数据。 这次,因为相应数据已保存到数据库中,所以您在第 5 步中所做的更改被保留。