使用ADO.NET解锁 Microsoft Access数据(二)

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
数据表单向导

Visual Studio . NET 数据表单向导允许您快速连接到 数据库,并生成简单的用户界面,用于显示 数据并与 数据进行交互。要使用 数据表单向导,请执行以下步骤:
在 Windows 应用程序项目中,在 Project(项目)菜单上,单击 Add Windows Form(添加 Windows 窗体)。
在 Templates(模板)窗格中,单击 Data Form Wizard( 数据窗体向导),单击 Open(打开),然后单击 Next(下一步)。
在 Create a new dataset named(创建新 数据集)框中,键入 DataSet1,然后单击 Next(下一步)。
选择现有的 数据连接或创建新 数据连接,然后单击 Next(下一步)。
选择要向 DataSet1 填充的项,然后单击 Next(下一步)。
如果选择多项,请定义各项之间的关系,然后单击 Next(下一步)。
定义要在表单中显示的表和列,然后单击 Next(下一步)。
选择显示样式选项,然后单击 Finish(完成)。
注意:请确保将新 数据表单设置为启动表单,方法如下:在 Project(项目)菜单中,单击 Properties(属性)。展开 Common Properties(通用属性)文件夹,单击 General(常规),在 Startup object(启动对象)列表中选择该 数据表单,然后单击 OK(确定)。
注意:请确保将 DataSet1 中的 数据绑定到 数据表单,这可以通过向 数据表单的 Load 事件插入以下代码来实现:Me.OleDbDataAdapter1.Fill(objDataSet1)
运行应用程序:在 Debug(调试)菜单上,单击 Run(运行)。
扩展的 ADO. NET 代码示例

为了向您演示更多的 ADO. NET 代码,在本月专栏的最后,我将介绍几个在 ADO. NET 中创建的扩展的代码示例。
使用 DataReader 对象以仅向前移动的、只读的格式访问 数据

很多时候,您只是希望简单地浏览 数据,而并不需要在 数据间来回浏览,也不需要更改 数据(我们将此称为“流水 数据”)。 ADO. NET 的 DataReader 对象是专门为此设计的。下面是我编写的一段示例代码,可以逐个读取连接的 数据库中的所有选定 数据
' Visual Basic . NET 代码。
' 控制台应用程序。
' 引用:
'   System
'   System.Data
'   System.XML

Imports System.Data.OleDb                   ' 用于 OleDb 对象。
Imports Microsoft.VisualBasic.ControlChars  ' 用于 CrLf 常量。

Module Module1

    Sub Main()

        ' 创建并初始化 OleDbConnection、OleDbCommand
        ' 和 OleDbDataReader 对象。
        Dim objConn As New _
            OleDbConnection("Provider= Microsoft.Jet.OLEDB.4.0;" & _
            "User ID=Admin;" & _
            "Data Source=C:/Program Files/ Microsoft" & _
            "Office/Office10/Samples/Northwind.mdb")

        objConn.Open()

        ' 执行命令并将 数据读取器附加到
        ' 所选 数据
        Dim objCmd As New OleDbCommand("SELECT * FROM Products", _
            objConn)
        Dim objReader As OleDbDataReader = objCmd.ExecuteReader

        ' 读取 数据并列出值。
        Call ReadData(objReader)

    End Sub

    Public Sub ReadData(ByVal objReader As OleDbDataReader)

        ' 目的:列出给定 数据读取器的 数据值。
        ' 接受:objReader - 数据读取器。

        Dim intField As Integer             ' 行中的当前字段。
        Dim intColumn As Integer            ' 当前列的名称。
        Dim blnColumns As Boolean = False   ' 列名称是否已
                                            ' 列出。

        With objReader

            ' 一次读取一行,直至文件末尾。
            Do While .Read = True

                For intField = 0 To .FieldCount - 1

                    ' 首先列出列名称。
                    If blnColumns = False Then

                        For intColumn = 0 To .FieldCount - 1

                            If intColumn = .FieldCount - 1 Then
                                Console.Write(.GetName(intColumn) & _
                                    CrLf)
                            Else
                                Console.Write(.GetName(intColumn) & _
                                    ", ")
                            End If

                        Next intColumn

                        ' 只列出一次列名称。
                        blnColumns = True

                    End If

                    ' 列出当前行中每个字段的值。
                    If intField = .FieldCount - 1 Then
                        Console.Write(.Item(intField) & CrLf)
                    Else
                        Console.Write(.Item(intField) & ", ")
                    End If

                Next intField

            Loop

        End With

        ' 暂停,以便用户在控制台窗口中查看 数据
        Console.Write("按任意键继续...")
        Console.Read()

    End Sub

End Module


下面是该代码的工作方式:
正如前面的代码示例所示,Imports 代码(例如,Imports System.Data.OleDb)有助于减少访问对象或对象的成员时所需的工作量。类似地,对 OleDbConnection、OleDbCommand 和 OleDbDataReader 对象进行声明和初始化,以分别代表 数据库连接、 数据记录和记录游标。此代码的真正核心是 ReadData 子例程。
Do 循环使用 OleDbDataReader 对象的 Read 方法一次读取一行 数据,直到该方法返回 False(表示已没有其他 数据可读取)。
OleDbDataReader 对象的 FieldCount 属性返回 数据行中 数据字段(列)的数目。如果是第一行 数据,则在列上调用 OleDbDataReader 对象的 GetName 属性,以返回列的名称。
OleDbDataReader 对象的 Item 属性与 FieldCount 属性结合,使用一个索引编号返回 数据行中每个 数据字段的值。
使用 DataAdapter、DataSet、DataTable、DataRow 和 DataColumn 对象处理 数据

ADO. NET 的 DataSet 对象是为断开连接的 数据而设计的。您可以在一个 数据集中模拟整个 数据库的结构和 数据,包括表、行、列、字段,甚至关系。处理完 数据后,可以使 数据集中的 数据与原始 数据库中的 数据同步。下面是我编写的一段示例代码,可以逐个读取断开连接的 数据集中的所有 数据
' Visual Basic . NET 代码。
' 控制台应用程序。
' 引用:
'   System
'   System.Data
'   System.XML

Imports System.Data.OleDb                   ' 用于 OleDb 对象。
Imports Microsoft.VisualBasic.ControlChars  ' 用于 CrLf 常量。

Module Module1

    Sub Main()

        ' 创建并初始化 OleDbDataAdapter 和 DataSet 对象。
        Dim objAdapter As New OleDbDataAdapter _
            ("SELECT * FROM Products", _
            "Provider= Microsoft.Jet.OLEDB.4.0;" & _
            "User ID=Admin;" & _
            "Data Source=C:/Program Files/ Microsoft" & _
            "Office/Office10/Samples/Northwind.mdb")
        Dim objDataSet As New DataSet()

        ' 将所选 数据复制到 数据集。
        objAdapter.Fill(objDataSet)

        ' 列出 数据集中的 数据值。
        Call ListData(objDataSet)

    End Sub

    Public Sub ListData(ByVal objDataSet As DataSet)

        ' 目的:列出给定 数据集的 数据值。
        ' 接受:objDataSet - 数据集。

        Dim objTable As DataTable
        Dim intRow, intColumn As Integer

        ' 数据集中可能包含有多个表。
        For Each objTable In objDataSet.Tables

            With objTable

                Console.Write("表" & _
                    .TableName "中的 数据" & ":" & CrLf)

                ' 首先列出列名称。
                For intColumn = 0 To .Columns.Count - 1

                    If intColumn = .Columns.Count - 1 Then
                        Console.Write(.Columns(intColumn).ColumnName _
                            & CrLf)
                    Else
                        Console.Write(.Columns(intColumn).ColumnName _
                            & ", ")
                    End If

                Next intColumn

                ' 按行列出 数据...
                For intRow = 0 To .Rows.Count - 1

                    ' ...然后按字段列出每行中的 数据
                    For intColumn = 0 To _
                        .Rows(intRow).ItemArray.Length - 1

                        If intColumn = _
                                .Rows(intRow).ItemArray.Length - 1 Then
                            Console.Write(.Rows(intRow). _
                                ItemArray(intColumn) _
                                & CrLf)
                        Else
                            Console.Write(.Rows(intRow). _
                                ItemArray(intColumn) & ", ")
                        End If

                    Next intColumn

                Next intRow

            End With

        Next objTable

        ' 暂停,以便用户在控制台窗口中查看 数据
        Console.Write("按任意键继续...")
        Console.Read()

    End Sub

End Module


下面是该代码的工作方式:
同样,Imports 代码(例如,Imports System.Data.OleDb)有助于减少访问对象或对象的成员时所需的工作量。类似地,对 OleDbDataAdapter 和 DataSet 对象进行声明和初始化,分别代表 数据库与 数据集之间的适配器以及 数据集。OleDbAdapter 对象的 FillData 方法将 数据库中的 数据复制到 数据集。此代码的核心是 ListData 子例程。
通过使用 DataSet 对象的 Tables 属性,最外层的 For...Each 循环将遍历 数据集中的每个表,并将每个表作为 DataTable 对象返回。
DataTable 对象的 Columns 属性返回一个 DataColumnCollection,代表表中的所有列。通过结合使用 Columns 属性和一个索引编号(即结合 DataColumnCollection 集合的 Count 属性,如代码中所示),将返回一个 DataColumn 对象。DataColumn 对象的 ColumnName 属性返回列的名称。
同样,DataTable 对象的 Rows 属性返回一个 DataRowCollection,代表表中的所有行。通过结合使用 Rows 属性和一个索引编号(即结合 DataRowCollection 集合的 Count 属性,如代码中所示),将返回一个 DataRow 对象。DataRow 对象的 ItemArray 属性返回一个 Object 类型的数组,代表 数据行中的每个值。通过结合使用 ItemArray 属性和一个索引编号(即结合 DataColumnCollection 集合的 Count 属性,如代码中所示),将返回单个 数据字段值。 

seover="window.status='正文--使用 ADO. NET 解锁 Microsoft Access 数据(二)';return true">
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值