配置数据集
在 Form 上右键单击 SqlDataAdapter 图标然后单击 Generate Dataset(生成数据集)
图 为 SqlDataAdapter 生成数据集
在 Generate Dataset(生成数据集)对话框中选择 New(新建)然后输入名称 BrowseInvoiceTotalsDS
在页面下部的窗口中BrowseInvoiceTotals(SqlDataAdapter) 应该被选中单击 OK(确定)
图 生成数据集属性表
下一步我们将为 Form 创建窗体元素
创建窗体元素
向 Form 添加一个 DataGrid 控件
打开工具箱然后单击 Windows Forms(Windows 窗体)
将一个 DataGrid 控件拖放到 Form 上右键单击 DataGrid 控件单击 Properties(属性)将 DataGrid 控件的 CaptionText 属性更改为 Invoice Report
配置 DataGrid 控件的属性以将其绑定到数据在 Properties(属性)的 Data(数据)部分中将 DataSource 属性设置为 BrowseInvoiceTotalsDSBrowseInvoiceTotals
图 DataGrid 属性页(单击图片以查看大图像)
重新设置 DataGrid 控件的大小使所有的列都可见
要填充数据集向 Form 中添加一个按钮然后将其 Text 和 Name 属性更改为 RunReport
双击按钮以打开代码窗口将以下代码行添加到 RunReport_Click 子例程中并保存该应用程序
BrowseInvoiceTotalsDSClear
使用 SqlDataAdapter 填充 DS
SqlDataAdapterFill(BrowseInvoiceTotalsDS)
现在可以测试我们的应用程序了运行该应用程序然后单击 RunReport 按钮SqlDataAdapter 将连接到数据库运行我们的存储过程和函数加载数据集并将数据传递到数据网格中输出结果应类似于图 所示的结果
图 示例应用程序输出结果(单击图片以查看大图像)
下一步我们将创建一个数据维护窗体
创建数据维护窗体
向 ServiceCall 项目中添加一个新窗体 (Form)在解决方案资源管理器中右键单击项目名称单击 Add(添加)然后单击 Add Windows Form(添加 Windows 窗体)
在 Templates(模板)下单击 Windows Form(Windows 窗体)模板然后单击 Open(打开)
向窗体中添加一个 SqlDataAdapter 控件将启动数据适配器配置向导
为 SqlDataAdapter 选择现有 ServiceCall 连接对于此 SqlDataAdapter 控件我们将让 Visual Studio NET 为我们创建所需的存储过程
单击 Create new stored procedures(创建新存储过程)然后单击 Next(下一步)将打开 Generate the stored procedures(生成存储过程)页面
单击查询生成器将 Customers 表添加到查询然后关闭 Add Table(添加表)对话框
在关系图窗格中选择所有的列单击 OK(确定)然后单击 Next(下一步)
在 Create the Stored Procedures(创建存储过程)属性页中分别为四个新存储过程提供一个名称(此示例中使用了 CustomersSelectCustomersDeleteCustomersInsert 和 CustomersUpdate)然后单击 Next(下一步)
当向导的最后一页显示成功生成所有存储过程的消息时单击 Finish(完成)
打开 SqlDataAdapter 控件的属性页查看以下属性这些属性被设置为我们所提供的存储过程名称值
SelectCommandCommandText 的值为 CustomersSelect
DeleteCommandCommandText 的值为 CustomersDelete
InsertCommandCommandText 的值为 CustomersInsert
UpdateCommandCommandText 的值为 CustomersUpdate
Visual Studio NET 基于我们提供的 Select 语句创建了四个存储过程将其编译到数据库并配置了 SqlDataAdapter 控件以使用这些存储过程
下一步要生成我们为 Form 创建的 SqlDataAdapter 的数据集
生成数据集
右键单击 SqlDataAdapter然后单击 Generate DataSet(生成数据集)
将数据集命名为 CustomersDS
向窗体中添加一个 DataGrid 控件将 DataSource 属性设置为 CustomersDSCustomers将 CaptionText 属性设置为 Maintain Customers
重新设置 DataGrid 控件的大小使所有的列都可见
在数据网格下添加一个按钮将其 Text 属性和 Name 属性更改为 Load
在第一个按钮的旁边添加另一个按钮将其 Text 属性和 Name 属性更改为 Update
双击 Load 按钮以打开代码窗口然后向 Load 按钮的单击事件中添加以下代码
CustomersDSClear()
SqlDataAdapterFill(CustomersDS)
在 Update 按钮的单击事件中添加以下代码
SqlDataAdapterUpdate(CustomersDS)
在运行应用程序之前必须将项目的 Startup 对象更改为 Form
更改 Startup 对象
在解决方案资源管理器中右键单击 ServiceCall 项目然后单击 Properties(属性)
在 Startup object(Startup 对象)下将 Startup 对象更改为 Form然后单击 OK(确定)
运行应用程序以打开维护窗体 (Form)单击 Load 按钮以加载数据网格其中带有表中的现有数据屏幕应类似于图 所示
图 示例应用程序输出结果(单击图片以查看大图像)
更新 ServiceCall 数据库
要删除行请单击该行然后按 Delete 键
要添加新行请在网格末尾单击空行中的任何一个单元格然后提供相应的值
完成更改后单击 Update(更新)
系统检查网格中每一行的 RowStatus调用相应的存储过程并传入正确的参数以处理请求的操作
此示例展示了 Visual Studio NET IDE 和框架的强大功能我们仅使用了几行代码就创建了功能完备的表维护应用程序
使用 ADONET 访问 SQL Server
Microsoft NET 框架提供了新版本的 ADO称为 ADONETADONET 的功能得到了加强能够更好地支持分布式应用程序的开发并主要依赖 XML 作为其内部数据结构
在以前版本的 ADO 中Recordset 对象是开发人员用于处理来自数据存储的数据的主要对象在 ADONET 中DataSet 对象取代了 Recordset 对象一个 DataSet 就是用户使用的数据在内存中的副本一个 DataSet 可以包含一个或多个 DataTable您可以将 DataSet 视为一个虚拟关系数据库DataSet 与原始数据源完全无关而且并非设计为与数据源直接通信ADONET 是使用托管提供程序与数据源进行通信的
ADONET 提供两种托管提供程序一种用于 SQL Server 数据库另一种用于任何 OLE DB 兼容数据库到目前为止我们创建的所有示例都使用了 SQL Server 托管提供程序如果查看工具箱中 Data(数据)下的选项会注意到三对名称相同而前缀不同的控件下表列出了这三对控件
前缀为 OLEDB 的控件表示 OLE DB 托管提供程序可用于访问任何与 OLE DB 兼容的数据库这些控件与当前的 ADO 对象类似但已被改写为托管代码以便在 NET 框架中使用
前缀为 SQL 的控件表示 SQL Server 托管提供程序只能用于 SQL Server与其 OLE DB 的对应控件相比这些控件具有一些优点首先这些对象使用本地表格数据流 (TDS) 接口以获得最佳性能OLE DB 对象所需的其他接口层已被删除这使得数据库的访问速度更快其次从这些控件中创建的 SQL 对象具有其他一些方法这些方法利用了专用于 SQL Server 的功能这为使用 SQL Server 进行设计和编程提供了更大的灵活性
我们在前面创建的示例应用程序中使用了 ADONET而 Visual Studio NET 为我们处理了大多数编码工作我们所要做的就是通过 IDE 的用户界面配置数据集和数据适配器现在让我们看看使用 ADONET 从表中选择插入更新和删除数据时所需要的 Microsoft Visual Basic® NET 编码首先看一下 Select 语句的代码
Dim strCmdText As String
Dim rowsProcessed As Integer
Dim CustomerDS As New DataSet()
strCmdText = Select * from Customers
Dim SqlDataAdapter As New SqlDataAdapter(strCmdText _
Data Source=localhost;Initial Catalog=ServiceCall;User
ID=sa;passsword=yourpassword)
SqlDataAdapterFill(CustomerDS Customers)
在此代码示例中我们首先定义了要使用的变量和对象包括 CustomersDS它是一个 ADONET DataSet 对象然后我们定义了查询该查询将填充变量 strCmdText 中的数据集下一步我们定义一个 ADONET SqlDataAdapter 对象 (SqlDataAdapter)将查询和数据库连接字符串作为参数提供请注意我们使用的是 SQL Server ADONET 托管提供程序最后我们通过调用 SqlDataAdapter 对象的 Fill 方法填充 CustomerDS 并在名为 Customers 的 DataSet 中创建一个表
因为 SqlDataAdapter 使用查询和连接串字符串进行了定义