知识大全 在 ADO 和 ADO.NET 中管理离线数据

Posted

篇首语:当生活如同炼狱,必须自己创造阳光。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在 ADO 和 ADO.NET 中管理离线数据相关的知识,希望对你有一定的参考价值。

在 ADO 和 ADO.NET 中管理离线数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  您可以使用无数种方法在 VB 和 VB NET 中处理数据 这两个平台都支持诸如数组和集合之类的结构 开发人员通常将自定义类包装到这些结构中 就如您在 Carl Ganz 年 月的专栏中看到的那样 数据独立(这可能是创建自定义数据抽象层的最大优势)允许用户在独立于数据库的情况下操作数据 这不仅降低了服务器的负担 还消除了维护到该数据库的开放连接的需要 或是对忘记更新 RDBMS 的担心 本月 Carl 将分析如何同时使用 ADO 和 ADO NET 来创建此类数据对象     在 VB 中 OLE DB 游标服务允许您创建通常作为虚构的Recordset 的内容 这些只是 ADO Recordset 对象的内存中实例 Field 对象将添加到这些实例中以形成一个数据结构 您需要显式创建这些 Recordset 客户端 如清单 中所示 默认情况下 它们是在服务器端创建的 您在服务器上不能有离线 Recordset     Set oRS = New ADODB Recordset  oRS CursorLocation = adUseClient  oRS CursorType = adStatic  oRS LockType = adLockBatchOptimistic   Add a few fields  With oRS Fields   Append LastName adVarChar adFldIsNullable   Append FirstName adVarChar adFldIsNullable   Append HireDate adDate  End With  oRS Open    一旦创建 Recordset 您就可以用数据填充它了 请注意 Field 集合的 Append 方法只能用于关闭的 Recordset 如果您在打开 Recordset 的 Fields 集合上或是已设置 ActiveConnection 属性的 Recordset 上调用 Append 就会导致运行时错误 清单 阐释了如何将数据添加到 Recordset 对象     清单 中的最后两行代码阐释了如何创建索引 以使排序更加高效 (通常 您应通过一个提供初始排序的 SQL 命令来加载此类数据 但是如果数据在网格中 您可能希望允许用户通过(比如说)单击列标题来排序它 )    清单 用数据填充 Recordset 对象      Populate with some data  oRS AddNew Array( LastName FirstName HireDate )_   Array( Washington Gee / / )  oRS AddNew Array( LastName FirstName HireDate )_   Array( Adams John / / )  oRS AddNew Array( LastName FirstName HireDate )_   Array( Jefferson Thomas / / )  oRS Update   Create an in memory index  oRS Fields( LastName ) Properties( Optimize ) Value _  = True   Sort on first name  oRS Sort = FirstName     创建 Recordset 的另一种方法涉及到离线 Recordset 这只是一个 Recordset 对象 它随后将连接到由于将 ActiveConnection 属性设置为 Nothing 而离线的服务器(请参见清单 )     清单 创建离线 Recordset     Dim objConnection As ADODB Connection  Dim szSQL As String  Set objConnection = New ADODB Connection   Open a connection  objConnection ConnectionString = whatever   objConnection Open   Instantiate a Recordset object   Set oRS = New ADODB Recordset  oRS CursorLocation = adUseClient  oRS CursorType = adOpenStatic  oRS LockType = adLockBatchOptimistic   and set the ActiveConnection property  Set oRS ActiveConnection = objConnection  szSQL = SELECT LastName FirstName & _   FROM Employees & ORDER BY LastName FirstName    Open the Recordset and return the employee data  oRS Open szSQL  Set oRS ActiveConnection = Nothing  objConnection Close  Set DataGrid DataSource = oRS     使用 ADO NET  ADO NET 为离线数据管理提供了更强大的功能 DataTable 和 DataSet 对象本身就定义为离线 因此您不必执行任何操作来使它们离线 从概念上来说 ADO NET DataTable 对象和 ADO Recordset 对象的编程创建过程非常类似 如清单 中所示 在本示例中 我们要创建一个 DataTable 对象 并向其添加列和行对象 正如您将看到的那样 ADO NET 的方法使用了一个比基于 的 ADO 所使用的更加层次化的对象模型     清单 创建 ADO NET DataTable 对象     Dim oDataRow As DataRow  Dim oDataColumn As DataColumn  Dim aPrimaryKey( ) As DataColumn  oDS = New DataSet   Create a new DataTable oect  oEmployeeDT = New DataTable   Add an event handler for column data changes  AddHandler oEmployeeDT ColumnChanged _  New DataColumnChangeEventHandler(AddressOf _  ColumnChanged)   Create primary key (PK) col and add it to the columns   collection Set init value to increment as needed   oDataColumn = New DataColumn  oDataColumn ColumnName = ID   oDataColumn DataType = _  System Type GetType( System Int )  oDataColumn AutoIncrement = True  oDataColumn AutoIncrementSeed =   oEmployeeDT Columns Add (oDataColumn)   PK property receives array of DataColumn objects in   case you have multi col index I prefer an ID column   aPrimaryKey( ) = oDataColumn  oEmployeeDT PrimaryKey = aPrimaryKey   Create the individual data columns  a€|  oDataColumn = New DataColumn  oDataColumn ColumnName = Salary   oDataColumn DataType = _  System Type GetType( System Decimal )  oEmployeeDT Columns Add (oDataColumn)   Here we use DataColumn s Expression property to show   what a % tax on the salary will amount to   oDataColumn = New DataColumn  oDataColumn ColumnName = IneTax   oDataColumn DataType = _  System Type GetType( System Decimal )  oDataColumn Expression = Salary *   oEmployeeDT Columns Add (oDataColumn)  oDataColumn = New DataColumn  oDataColumn ColumnName = HireDate   oDataColumn DataType = _  System Type GetType( System DateTime )  oEmployeeDT Columns Add (oDataColumn)   This col receives the value calc d by event handler  oDataColumn = New DataColumn  oDataColumn ColumnName = DaysSinceHire   oDataColumn DataType = _  System Type GetType( System Int )  oEmployeeDT Columns Add (oDataColumn)   Once the columns are added add sample data  oDataRow = oEmployeeDT NewRow()  oDataRow( LastName ) = Washington   oDataRow( FirstName ) = Gee   oDataRow( Salary ) =   oDataRow( IneTax ) = True  oDataRow( HireDate ) = / /   oEmployeeDT Rows Add (oDataRow)  a€|   Commit new data to the DataTable object and set   RowState values of each row to Unchanged  oEmployeeDT AcceptChanges()   Let s show the user  DataGrid DataSource = oEmployeeDT    在实例化 DataTable 对象之后 您就可以使用这个事件模型将事件处理程序 DataColumnChangeEventHandler 设置为自定义例程 通过传递 ColumnChanged 例程的地址 只要一个列中的数据更改 您就可以执行这个处理程序 在本例中 我们要使用它来确定职员被雇佣以来的天数(请参见清单 )     清单 ColumnChanged 事件处理程序     Sub ColumnChanged(ByVal sender As Object _  ByVal e As DataColumnChangeEventArgs)  If e Column ColumnName = HireDate Then  e Row( DaysSinceHire ) = _  DateDiff(DateInterval Day _  e Row( HireDate ) Date Today)  End If  End Sub    由于用户在网格中编辑数据 添加和删除行 因此每个行对象的 RowState 属性会更改 以指示所作修改的类型 当用户将离线数据提交到 RDBMS 时 需要计算每一行来确定用户执行了何种类型的更改 要完成这一操作 您可以通过 GetChanges 方法检索包含所有新近添加 修改和删除的行的 DataTable 对象 然后 循环访问这个新 DataTable 中的每个行对象并计算 RowState 属性 如清单 中所示     清单 标识更改的行并保存更改     Dim oDataRow As DataRow  Dim oChangeDT As DataTable   Get DataTable with only changed rows  oChangeDT = oEmployeeDT GetChanges()   Save button s/b disabled until a change is made  If oChangeDT Is Nothing Then  Exit Sub  End If   Loop thru changed rows make db updates  For Each oDataRow In oChangeDT Rows  Select Case oDataRow RowState  Case DataRowState Added   Insert code here  Case DataRowState Modified   Update code here  Case DataRowState Deleted   Delete code here cha138/Article/program/net/201311/12866

相关参考

知识大全 ADO.Net与ADO在数据内存中的差异讨论

ADO.Net与ADO在数据内存中的差异讨论  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据

知识大全 ADO.net中数据库连接方式

ADO.net中数据库连接方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在MSDN中net

知识大全 在 ADO.NET2.0 中对于从您的数据源访问元数据

在ADO.NET2.0中对于从您的数据源访问元数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 ADO.NET Entity Framework存取数据库中图片

ADO.NETEntityFramework存取数据库中图片  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Ado.net访问数据库的方法和步骤

Ado.net访问数据库的方法和步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 ADO.NET Entity Framework存取数据库中的图片

ADO.NETEntityFramework存取数据库中的图片  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 使用ADO.NET 和C# 处理BLOB 数据

使用ADO.NET和C#处理BLOB数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用Mi

知识大全 用ADO.NET处理层次数据

用ADO.NET处理层次数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ADONET为数据在

知识大全 讲析ADO.NET数据源技巧

讲析ADO.NET数据源技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  和许多ADONET数

知识大全 使用ADO.NET设计数据库应用程序

使用ADO.NET设计数据库应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  认识ADO和