DataSet和DataAdapter组件

15.9  DataSetDataAdapter组件

本节介绍通过SqlConnection对象从数据库检索数据,实现对DataSet对象的填充。DataSet可以包括多张数据库表,这些表可以来自多个数据库。开发人员可以将DataSet对象绑定到Grid控件或其他控件来显示其中的数据,也可以通过改变DataSet对象里的排序和过滤条件来改变数据视图。但是在使用DataSet之前,必须向DataSet填充数据。

在清单15-7里,使用与清单15-6中相同的数据库连接字符串,通过构造器初始化DataAdapter对象。当DataAdapter被初始化后,就可以调用DataAdapterFill()方法填充DataSet对象。

清单15-7  填充DataSet

Public Function GetMyDataSet() As Data.DataSet

Dim conNwindCE As Data.SqlClient.SqlConnection

Dim adapterData As Data.SqlClient.SqlDataAdapter

Dim connString As String

 

Try

    ' 创建、打开数据库连接

    connString = "server=192.168.0.10;database=Nwind_SQLCE;user id=sa;pwd=pword;"

    conNwindCE = New Data.SqlClient.SqlConnection(connString)

 

    ' 创建命令对象

    adapterData = New Data.SqlClient.SqlDataAdapter("SELECT * FROM Customers", connString)

 

    Dim ds As Data.DataSet = New Data.DataSet

    adapterData.Fill(ds)

    Return ds

Catch ex As Data.SqlClient.SqlException

    MessageBox.Show(ex.Message)

Finally

 

End Try

End Function

注意,使用SqlDataAdapter填充DataSet时,通常都会返回一个可用的DataSet对象。但是如果查询所执行的SQL语句不返回结果时,仍将返回一个包含有DataTable对象的可用DataSet。那么如何判断DataSet是空的呢?可以使用DataTable对象下面的DataRowCollectionCount属性进行判断。

DataSet不依赖数据源及数据库连接。在清单15-7里,DataAdapter能够自动打开数据库连接。GetMyDataSet函数将DataSet对象返回给函数调用者后,函数调用者可以浏览其中的数据;可以根据DataSet里的数据创建子DataSet对象;可以过滤数据;或者更新DataSet里的数据。而这些操作都不依赖数据库连接。

DataSet最常见的用途是将其绑定到一个具有DataSource属性的控件,例如将其绑定到DataGrid控件的DataSource属性,如以下代码所示:

……

Try

    Dim ds As DataSet = GetMyDataSet()

    Me.DataGrid1.DataSource = ds.Tables(0)

Catch ex As Exception

    MsgBox(ex.Message)

End Try

……

上面代码的执行结果如图15-1所示。

15-1  绑定DataSetDataGrid 控件

可以使用多种方法访问存储在DataSet中的数据。清单15-8展示了一个访问存储在DataSet数据的示例。清单15-8使用与清单15-7中相同的连接设置来填充DataSet,然后遍历DataSet中第一张表的Rows集合读取记录数据。

 

清单15-8  访问DataSet数据

……

Dim conNwindCE As Data.SqlClient.SqlConnection

Dim adapterData As Data.SqlClient.SqlDataAdapter

Dim connString As String

 

Try

    ' 创建、打开数据库连接

    connString = "server=192.168.0.10;database=Nwind_SQLCE;user id=sa;pwd=pword;"

    conNwindCE = New Data.SqlClient.SqlConnection(connString)

 

    ' 创建 SqlDataAdapter 对象

    adapterData = New Data.SqlClient.SqlDataAdapter("SELECT * FROM Customers", connString)

 

    Dim ds As New Data.DataSet

    adapterData.Fill(ds)

 

    Dim strCustomerID As String

    Dim strCustomerName As String

    Dim strContactName As String

 

    For Each dr As Data.DataRow In ds.Tables(0).Rows

        strCustomerID = dr.Item(0)

        strCustomerName = dr.Item(1)

        strContactName = dr.Item("ContactName")

    Next

Catch ex As Exception

    MessageBox.Show(ex.Message)

Finally

 

End Try

……

本节介绍通过SqlConnection对象从数据库检索数据,实现对DataSet对象的填充。DataSet可以包括多张数据库表,这些表可以来自多个数据库。开发人员可以将DataSet对象绑定到Grid控件或其他控件来显示其中的数据,也可以通过改变DataSet对象里的排序和过滤条件来改变数据视图。但是在使用DataSet之前,必须向DataSet填充数据。
在清单15-7里,使用与清单15-6中相同的数据库连接字符串,通过构造器初始化DataAdapter对象。当DataAdapter被初始化后,就可以调用DataAdapter的Fill()方法填充DataSet对象。
清单15-7  填充DataSet
Public Function GetMyDataSet() As Data.DataSet
Dim conNwindCE As Data.SqlClient.SqlConnection
Dim adapterData As Data.SqlClient.SqlDataAdapter
Dim connString As String
 
Try
    ' 创建、打开数据库连接
    connString = "server=192.168.0.10;database=Nwind_SQLCE;user id=sa;pwd=pword;"
    conNwindCE = New Data.SqlClient.SqlConnection(connString)
 
    ' 创建命令对象
    adapterData = New Data.SqlClient.SqlDataAdapter("SELECT * FROM Customers", connString)
 
    Dim ds As Data.DataSet = New Data.DataSet
    adapterData.Fill(ds)
    Return ds
Catch ex As Data.SqlClient.SqlException
    MessageBox.Show(ex.Message)
Finally
 
End Try
End Function
注意,使用SqlDataAdapter填充DataSet时,通常都会返回一个可用的DataSet对象。但是如果查询所执行的SQL语句不返回结果时,仍将返回一个包含有DataTable对象的可用DataSet。那么如何判断DataSet是空的呢?可以使用DataTable对象下面的DataRowCollection的Count属性进行判断。
DataSet不依赖数据源及数据库连接。在清单15-7里,DataAdapter能够自动打开数据库连接。GetMyDataSet函数将DataSet对象返回给函数调用者后,函数调用者可以浏览其中的数据;可以根据DataSet里的数据创建子DataSet对象;可以过滤数据;或者更新DataSet里的数据。而这些操作都不依赖数据库连接。
DataSet最常见的用途是将其绑定到一个具有DataSource属性的控件,例如将其绑定到DataGrid控件的DataSource属性,如以下代码所示:
……
Try
    Dim ds As DataSet = GetMyDataSet()
    Me.DataGrid1.DataSource = ds.Tables(0)
Catch ex As Exception
    MsgBox(ex.Message)
End Try
……
上面代码的执行结果如图15-1所示。
图15-1  绑定DataSet到DataGrid 控件
可以使用多种方法访问存储在DataSet中的数据。清单15-8展示了一个访问存储在DataSet数据的示例。清单15-8使用与清单15-7中相同的连接设置来填充DataSet,然后遍历DataSet中第一张表的Rows集合读取记录数据。
 
清单15-8  访问DataSet数据
……
Dim conNwindCE As Data.SqlClient.SqlConnection
Dim adapterData As Data.SqlClient.SqlDataAdapter
Dim connString As String
 
Try
    ' 创建、打开数据库连接
    connString = "server=192.168.0.10;database=Nwind_SQLCE;user id=sa;pwd=pword;"
    conNwindCE = New Data.SqlClient.SqlConnection(connString)
 
    ' 创建 SqlDataAdapter 对象
    adapterData = New Data.SqlClient.SqlDataAdapter("SELECT * FROM Customers", connString)
 
    Dim ds As New Data.DataSet
    adapterData.Fill(ds)
 
    Dim strCustomerID As String
    Dim strCustomerName As String
    Dim strContactName As String
 
    For Each dr As Data.DataRow In ds.Tables(0).Rows
        strCustomerID = dr.Item(0)
        strCustomerName = dr.Item(1)
        strContactName = dr.Item("ContactName")
    Next
Catch ex As Exception
    MessageBox.Show(ex.Message)
Finally
 
End Try
……
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值