国内更全面
解决程序疑难杂症

初识DataTable

   在重构机房时,D层负责与数据库交互。D层对数据库进行查询操作,返回的值是DataTable对象。在系统中可以通过DataTable对象给窗体中的TextBox、DataGridView等控件赋值,也可以通过返回的DataTable对象判断数据库中是否存在查询的数据。总的来说,涉及到与数据库交互的系统对DataTable的使用是非常广泛的。这篇文章主要是对DataTable做一个简单的介绍。

   DataTable对象是内存中的一个虚拟的数据表,主要由DataRow对象和DataColumn对象组成。DataTable对象是组成DataSet对象的主要组件,因DataSet对象可以接收由DataAdapter对象执行SQL指令后所取得的数据,这些数据是DataTable对象的格式,所以DataSet对象也需要许多DataTable对象来储存数据,并可利用DataRows集合对象中的Add方法加入新的数据。DataTable类属于System.Data命名空间,因此要想使用DataTable对象必须引用System.Data命名空间。DataTable对象常用的属性请参见表所示:
   
   在机房重构中通过D层查询数据库返回DataTable对象的方法,使用SqlHelper类,下面对SqlHelper类中对数据库查询操作的代码:

'/// <summary>    
    ''///执行查询操作,(有参)返回值为datatable类型    
    '/// </summary>    
    '/// <param name="strSql">需要执行语句,一般是Sql语句,也有存储过程</param>    
    '///<param name="cmdType">判断Sql语句的类型,一般都不是存储过程</param>    
    '/// <param name="sqlParams">参数数组,无法确认有多少参数</param>  
    '/// <returns>  
    '///<返回表>  
    '/// </returns>  
    Public Function ExecuteSelect(ByVal strSql As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable
        Dim sqlAdapter As SqlDataAdapter
        '定义数据表参数dtSQL
        Dim dtSQL As New DataTable()
        '定义数据集参数dsSQL
        Dim dsSQL As New DataSet

        '用传进的参数填充本类自己的cmd对象    
        cmdSQL.CommandText = strSql
        cmdSQL.CommandType = cmdType
        cmdSQL.Connection = cnnSQL
        '参数添加
        cmdSQL.Parameters.AddRange(sqlParams)
        '实例化adapter      
        sqlAdapter = New SqlDataAdapter(cmdSQL)

        Try
            '用adapter将dataSet填充 
            sqlAdapter.Fill(dsSQL)
            'datatable为dataSet的第一个表 
            dtSQL = dsSQL.Tables(0)
            '清除参数   
            cmdSQL.Parameters.Clear()
        Catch ex As Exception
            MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告")
        Finally
            '最后一定要销毁cmd  
            Call CloseSQLCommand()
        End Try
        '返回值DataTable对象
        Return dtSQL

    End Function
    在SqlHelper类中对查询出来的数据填充到DataSet(数据集)中,DataSet是DataTable的集合,其中包括一个或者多个DataTable。  通过“dtSQL=dsSQL.Tables(0)”这句代码将DataSet中的第一张表提取出来作为返回值DataTable,最终得到我们查询得出的表。

   总结

   在实现窗体中控件与数据的绑定时,DataTable起着很大的作用。但是DataTable在三层中进行数据传递时也有它的不足之处,具体的内容请看文章 泛型集合代替DataTable.

   PS:以上只是个人对DataTable的理解,如有不足之处,请斧正!

   

   

企业站定制,我们更专业!

联系我们