DataTable.Select方法

简述            

         最近做项目遇到一个效率的问题,是因为数据库设计的时候和需要显示在界面的格式是不同的,看图就知道问题所在了。

这是数据库的数据表:

       DataTable.Select方法_第1张图片


而要显示在界面上的数据表如图所示:

 


          一开始的想法是在U层不断地循环获取每一个点的坐标,根据两个ID确定数据库中Data,然后循环将data数据赋值给DataGridView中的相应点。但是,问题也就显示出来,随着数据表的增加,每执行一次显示数据表的操作,都需要10几秒的时间才能将数据显示出来。这显然是不能满足软件的运行要求的。那么,如何解决这个问题呢。

           经过分析,速度慢的原因就是每显示一张表,需要大概几百次的Select查询数据,也就是要访问数据库几百次,时间都浪费在访问数据库上了。所以,我就想能不能先根据listId,先确定这张表的数据,然后在U层进行数据的赋值,这样就执行一次访问数据库。效率肯定会提高。所以,DataTable.Select 方法也就起了作用。

DataTable.Select方法         

        获取 DataRow 对象的数组。


                 名称                                           说明

Select()                                  获取所有 DataRow 对象的数组。 

Select(String)                         按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 DataRow 对象的数组。  
Select(String, String)            获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。 

Select(String, String, DataViewRowState)       获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。


具体的使用方法,请看这几条语句:

1 DataRow[] drArr = dt.Select("C1='abc'");//查询
2 DataRow[] drArr = dt.Select("C1 LIKE 'abc%'");//模糊查询
3 DataRow[] drArr = dt.Select("'abc' LIKE C1 + '%'", "C2 DESC");//另一种模糊查询的方法
4 DataRow[] drArr = dt.Select("C1='abc'", "C2 DESC");//排序

应用

If table.Rows.Count > 0 Then                  '首先要获得已经查询出来的DataTable数据表

            For s = 1 To rowNumber  '18                   '循环获得行和列的ID
                For h = 0 To lineNumber   '9
                    '获得行列名称
                    row = dgvData.Columns(s).HeaderText.ToString          '获得行标题
                    line = dgvData.Rows(h).Cells(0).Value                 '获得列标题

                    Dim rows As DataRow()                                 '定义<span style="font-size:14px;">DataRow 对象的数组</span>
                    rows = table.Select("T_rowTable.name = '" + row + "' and T_lineTable.name= '" + line + "'") '执行DataTable数据表的查询

                    '数据填充
                    If rows.Length = 0 Then
                        dgvData.Rows(h).Cells(s).Value = ""
                    Else
                        If rows(0)(2).ToString = 0 Then
                            dgvData.Rows(h).Cells(s).Value = ""
                        Else
                            dgvData.Rows(h).Cells(s).Value = rows(0)(2).ToString
                        End If

                    End If

                Next
            Next
        End If

         通过使用这个方法,查询一张表的速度明显上升,基本感觉不到慢。新方法还是要灵活利用。

你可能感兴趣的:(DataTable.Select方法)