当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  掌握ADO.NET的十个热门技巧 3

 掌握ADO.NET的十个热门技巧 3

点击次数:23 次 发布日期:2008-11-26 10:38:28 作者:源代码网
源代码网推荐      5. 运用Find来读取一个记录
源代码网推荐  
源代码网推荐    通过运用DataTable的Select方法来运行一个内存中的查询,或在视图上设置一个过滤器来滤掉与指定标准不匹配的所有的记录,你就可以读取一个DataTable对象中的一个特定的行了。你可以通过设置DataView类上的 RowFilter属性来设置一个过滤器。这两种方法都运用相同的引擎来选择记录。它们可以接纳一个表达式,对它进行解析并求各个子句的值。 DataTable的Select方法返回一个带有所有相匹配的DataRow对象的数组。RowFilter属性重建DataView的内部索引来包含所有的(且仅包含)匹配的记录。然后,应用程序就可以访问记录了。这两种方法在性能上几乎是一样的;运用哪种方法取决于环境和个人喜好。例如,如果你用的是数据绑定的控件,如一个DataGrid或DataList,那么RowFilter就很理想。如果你必须处理一串记录,那么Select方法就更好了。
源代码网推荐  
源代码网推荐    然而,你还可以用另一种方法(仍然是基于DataView的),它是读取一个表中的记录的最快的方法。该方法就是用Find:
源代码网推荐  
源代码网推荐  Dim view As DataView
源代码网推荐  view = New DataView(table)
源代码网推荐  view.Sort = "orderid"
源代码网推荐  Dim index As Integer = view.Find(10248)
源代码网推荐  Dim row As DataRow = view(index).Row
源代码网推荐  
源代码网推荐    Find方法运用了视图的当前索引,并将指定的值(或多个值)与形成当前索引的字段匹配起来。在前面的代码中,值10248与列orderid匹配。如果Sort属性为空,且DataTable对象有一个主键,那么就运用主键中的列。Find方法返回的是相匹配的第一行的基于0的位置的值。
源代码网推荐  
源代码网推荐    如果你想返回多个记录,可以用FindRows的演变形式:
源代码网推荐  view.Sort = "orderid, discount"
源代码网推荐  Dim keys(1) As Object
源代码网推荐  keys(0) = 10248
源代码网推荐  keys(1) = 0
源代码网推荐  Dim row As DataRow = _
源代码网推荐  view(view.Find(keys)).Row
源代码网推荐  
源代码网推荐    前面的代码可以让你通过运用Find的重载方法(带有一组对象)来匹配多个列的值。
源代码网推荐  
源代码网推荐    6. 尽可能用预先排序的数据
源代码网推荐  
源代码网推荐    ADO.NET对象模式使我们可以很容易地实现排序。你可以创建一个DataView对象并设置其Sort属性;ADO.net runtime查看新的排序表达式并为视图重编索引。该步骤是在内存中实现的,但速度并不快。排序的花费很高,更重要的是,它并不是个线性操作(linear operation)。对一组数据进行排序需要n*log(n)的计算成本,就是说,随着需要排序的条目数量的增加,直线增加的成本是很大的。因此,你应该限制应用程序中的排序,尽可能地运用预先排序的数据。在Web应用程序中,动态排序对性能的影响是相当大的。既然如此,你就应该设计应用程序,限制对动态排序的需求,并依赖在数据库服务器中写死的算法。除非你在用应用程序的一个可以使复杂性低于n*log(n)极限的特殊的功能,否则避免运用手工排序算法,因为这种算法可能比系统中的算法更糟。
源代码网推荐  
源代码网推荐    7. ADOX可以帮你得到并改变Schema信息
源代码网推荐  
源代码网推荐    ADO.NET并没有为得到并管理schema信息提供一个完全的对象模式。你应该用ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX)或用每个数据库提供的本地功能来得到并改变Schema信息。ADOX是ADO对象的一个扩展,它包括用来创建和修改Schema的对象。你可以编写适用于各种数据源的代码(不管本地语法有什么不同),因为ADOX是管理schema的一个基于对象的方法。
源代码网推荐  
源代码网推荐    你可以用一个data reader对象来读(不是设置)简单的schema信息。所有的data reader类(OleDbDataReader、SqlDataReader、OracleDataReader)都提供了一个GetSchemaTable方法,该方法可以读取查询到的列的元数据信息。GetSchemaTable返回一个DataTable对象(格式是每列一行)和固定的一组包含信息的列。返回的元数据可以分成三类:列元数据、数据库特征和列属性。返回的列可以是AllowDBNull、IsAutoIncrement、ColumnName、IsExpression、 IsReadonly和NumericPrecision等。在MSDN资料中有完整的列表(见附加资源)。
源代码网推荐  
源代码网推荐    在调用ExecuteReader时,如果你执行KeyInfo命令,那么GetSchemaTable方法就可以返回更精确的数据。你可以将KeyInfo行为同缺省的行为结合起来,执行一个单独的命令并得到schema和数据:
源代码网推荐  
源代码网推荐  reader = cmd.ExecuteReader( _
源代码网推荐  CommandBehavior.KeyInfo Or _
源代码网推荐  CommandBehavior.CloseConnection)
源代码网推荐  
源代码网推荐    只有执行KeyInfo,IsKey、BaseTableName、IsAliased、IsExpression和IsHidden字段的值才能被正确返回。如果执行KeyInfo,关键的列(如果有)通常是添加在结果集的底部的,但不给它们返回数据。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华