更新 ServiceCall 数据库
1、要删除行,请单击该行,然后按 Delete(删除)键。
2、要添加新行,请单击网格末尾空行中的任意单元格,然后提供相应的值。
3、完成更改后,单击 Update(更新)。
系统将检查网格中每一行的 RowStatus、调用相应的存储过程并传入正确的参数以处理请求的操作。
此示例展示了 Visual Studio .NET IDE 和框架的强大功能。我们仅使用了几行代码,就创建了功能完备的表维护应用程序。
使用 ADO.NET 访问 SQL Server
Microsoft .NET Framework 提供了名为 ADO.NET 的 ADO 的新版本。ADO.NET 功能得到了增强,能够更好地支持分布式应用程序的开发,并主要依赖 XML 作为其内部数据结构。
在以前版本的 ADO 中,Recordset 对象是开发人员用于处理来自数据存储的数据的主要对象。在 ADO.NET 中,DataSet 对象取代了 Recordset 对象。DataSet 是用户使用的数据在内存中的副本。DataSet 可以包含一个或多个 DataTables。您可以将 DataSet 视为一个虚拟关系数据库。DataSet 完全独立于原始数据源,而且不是用来与数据源进行直接通信。ADO.NET 是使用托管提供程序与数据源进行通信的。
ADO.NET 提供两种托管提供程序:一种用于 SQL Server 数据库,另一种用于任何 OLE DB 兼容数据库。到目前为止,我们创建的所有示例都使用了 SQL Server 托管提供程序。如果查看工具箱中 Data(数据)下的选项,您会注意到三对名称相同但前缀不同的控件。下表列出了这三对控件。
| SQL Server |
OLE DB |
| SqlDataAdapter |
OLEDBDataAdapter |
| SqlDataConnection |
OLEDBDataConnection |
| SqlCommand |
OLEDBCommand |
前缀为 OLEDB 的控件表示 OLE DB 托管提供程序,可用于访问所有与 OLE DB 兼容的数据库。这些控件与当前的 ADO 对象类似,但已被改写为托管代码,因而可以在 .NET Framework 中使用。
前缀为 SQL 的控件表示 SQL Server 托管提供程序,只能用于 SQL Server。与其 OLE DB 的对应控件相比,这些控件具有一些优点。首先,这些对象使用本地表格数据流 (TDS) 接口以获得最佳性能。OLE DB 对象所需的其他接口层已被删除,这使数据库的访问速度更快。其次,从这些控件中创建的 SQL 对象具有其他一些方法,这些方法利用了专用于 SQL Server 的功能。这为使用 SQL Server 进行设计和编程提供了更大的灵活性。
我们在前面创建的示例应用程序中使用了 ADO.NET,而 Visual Studio .NET 为我们处理了大多数编码工作,我们所要做的就是通过 IDE 的用户界面配置数据集和数据适配器。现在,让我们看看使用 ADO.NET 从表中选择、插入、更新和删除数据时所需的 Microsoft Visual Basic? .NET 编码。首先看一下 Select 语句的代码:
Dim strCmdText As String Dim rowsProcessed As Integer Dim CustomerDS As New DataSet() strCmdText = "Select * from Customers" Dim SqlDataAdapter2 As New SqlDataAdapter(strCmdText, _ "Data Source=localhost;Initial Catalog=ServiceCall;User ID=sa;passsword=yourpassword") SqlDataAdapter2.Fill(CustomerDS, "Customers") |
在此代码示例中,我们首先定义了要使用的变量和对象,其中包括 CustomersDS,它是一个 ADO.NET DataSet 对象。然后我们定义了查询,该查询将填充变量 strCmdText 中的数据集。下一步,我们定义一个 ADO.NET SqlDataAdapter 对象 (SqlDataAdapter2),将查询和数据库连接字符串作为参数提供。请注意,我们使用的是 SQL Server ADO.NET 托管提供程序。最后,通过调用 SqlDataAdapter 对象的 Fill 方法,填充 CustomerDS 并在名为 Customers 的 DataSet 中创建一个表。
因为 SqlDataAdapter2 是使用查询和连接串字符串定义的,所以 Fill 方法将建立到 SQL Server 数据库的连接、执行查询并将结果返回到 DataSet。
下一步,我们将看一看在表中插入行的代码:
Dim strCmdText As String Dim rowsProcessed As Integer Dim sqlConn As New SqlConnection _ ("Data Source=localhost;Initial Catalog=ServiceCall;User ID=sa;password=yourpassword") strCmdText = "INSERT INTO Customers VALUES ('Cust4', 'Customer Four', " _ & "'Cust4 Address', 'City', 'ST', '11111','(888)-123-4567')" Dim sqlCmd As New SqlCommand(strCmdText, sqlConn) sqlCmd.Connection.Open() rowsProcessed = sqlCmd.ExecuteNonQuery() |
我们首先定义将要使用的对象和变量。然后创建一个 ADO.NET SqlConnection 对象 (sqlConn),并将连接字符串作为参数传递给该对象。然后定义查询,该查询将行插入到变量 strCmdText 中的 Customers 表中。
下一步,我们定义一个 ADO.NET SqlCommand 对象,并将查询和 SqlConnection 对象作为参数传递给该对象。然后,我们打开 SqlCommand 对象上的连接,并调用 ExecuteNonQuery 方法。ExecuteNonQuery 方法返回数据库操作所影响的行的数目。
除了传递给 SqlCommand 对象的查询以外,更新和删除表的代码与插入操作的代码基本相同。本文列出了这些代码,但因为它与插入操作的代码相同,所以没有对该代码进行赘述。
以下代码将更新表中的一行:
Dim strCmdText As String Dim rowsProcessed As Integer Dim sqlConn As New SqlConnection _ ("Data Source=localhost;Initial Catalog=ServiceCall;User ID=sa;password=yourpassword") strCmdText = "Update Customers Set CustomerName = 'Updated Customer' " _ & "Where CustomerID = 'Cust4'" Dim sqlCmd As New SqlCommand(strCmdText, sqlConn) sqlCmd.Connection.Open() rowsProcessed = sqlCmd.ExecuteNonQuery() |
以下代码将删除表中的一行。
Dim strCmdText As String Dim rowsProcessed As Integer Dim sqlConn As New SqlConnection _ ("Data Source=localhost;Initial Catalog=ServiceCall;User ID=sa") strCmdText = "Delete Customers Where CustomerID = 'Cust4'" Dim sqlCmd As New SqlCommand(strCmdText, sqlConn) sqlCmd.Connection.Open() rowsProcessed = sqlCmd.ExecuteNonQuery() |
这些示例展示了如何使用 SqlCommand 对象的 ExecuteNonQuery 方法。SqlCommand 对象还具有其他几个方法,包括专用于 SQL Server 处理 XML 数据的方法。在下一个示例中,我们将介绍它的工作原理。