日期:2013-10-17  浏览次数:20508 次


        使用DataReader可以在你的使用程序中做以下事情:

        I.不需求缓存数据;

        II.处理太大而不能存储的数据;

        III.需求以只进、只读和快速方式一次性访问数据的。

    G.使用一个自定义的强无力的DataSet类型的好处

        通过创建一个承继于DataSet的子对象,你可以在运转期间执行类型检查和声明。当你有了一个确定的计划或者为你的DataSet有相关的结构,你就可以创建一个用行和列表述一个对象的DataSet。比如,你表露一个消费者对象的名字属性来取代表露消费者表的一行中的名字列。有关此节详细信息,请参考微软站点上的文章:Working with a Typed DataSet

    H.在自定义的DataSet中处理无效数据

        通过XSD言语检查你的DataSet确保你的DataSet适当地处理无效援用。nullValue注释使你把BBNull替换成别的字符,String.Empty;或者保留无效援用,抛出错误提示,提示将取决于你使用程序的上下文,默认情况是援用了无效字符。

    I.在DataSet中刷新数据

        如果你要从数据库刷新你的DataSet,使用DataAdapter.Fill,如果你的DataTable拥有主键,DataAdapter.Fill将依据主键婚配新的行,同时从数据库取值运用到已存在的行。除非已刷新行在再次刷新前被修正,否者它的RowState将会被设置为UnChanged。留意的是如果DataTable没有设置主键,你的DataSet有可能出现反复的值。如果你想从数据库刷新一个表并保留任何表中行的更改,那么你就要首先填充一个新表,然后利用preserveChanges等于true来合并那个DataTable到你的DataSet中去。

    J.在DataSet中搜索数据

        当你在一个DataSet中查询特殊标准的行时,利用索引查询将会添加你的查询功用。当你给一个DataTable设计主键时,索引同时也创建了。当你为一个DataTable创建DataView时,索引也同时创建了。以下是使用索引查询的一些情况:

        I.如果查询与DataTable中标识主键的列顺序相反,使用DataTable.Rows.Find代替DataTable.Select;

        II.如果查询包括无主键的列,你可以使用DataView为数据的多重查询改善功用。当你在DataView中使用排序时,查询的同时就会创建一个索引。DataView使用Find和FindRows方法查询DataTable中的数据;

        IV.假如你不需求表的排序视图,你也可以利用DataView为DataTable创建一个索引查询。留意的是这仅仅在你执行多重查询时才有优势,如果你只是执行一个简单查询,使用此方法将会降低你的查询效率。

    K.DataView的结构

        前面也讲过,在给DataTable创建DataView和Sort、RowFilter或者RowStateFilter属性发生更改的同时潜在的也给DataTable创建了索引。创建DataView对象时,如果Sort、RowFilter和RowStateFilter属性也同时指定,那么索引将只创建一次;如果创建一个空的DataView,那么索引至少被创建两次。

    L.页面调度

        ADO.NET使你可以很清楚地控制从你的数据库前往什么样的数据和有多少数据存储到一个DataSet。以下没有单一的引见调度一个查询结果,但是当你设计你的使用程序时应该考虑到以下情况:

        I.避免在使用DataAdapter.Fill时,在startRecord和maxRecords值上溢出。

        II.处理这类问题的办法是使用WHERE语句、ORDER BY语句和TOP断言。

        III.还有一种处理办法是使用TOP断言和嵌套的SELECT声明。比如如下代码:

     SELECT TOP 10 * FROM

(SELECT TOP 30 * FROM Customers ORDER BY Id ASC) AS Table1 ORDER BY Id DESC

IV.如果你的日期不是经常改变,你可以使用DataSet的存储功用改善执行功用,比如你可以存储相当10页的数据到你的DataSet,然后当用户访问超过在存储区的FirstPage和LastPage时才查询数据库以获得新的数据。

    M.有计划地填充DataSet

        当使用数据填充DataSet时,DataAdapter.Fill方法使用DataSet已有的计划和SelectCommand前往的数据对DataSet进行填充。如果DataSet中没有与之对应的表将会失败,Fill创建一个表,默认情况下,Fill仅仅定义列和列的类型。你可以通过设置DataAdapter的MissingSchemaAction属性重载默认的Fill方法。举例,要使Fill方法创建表时总是包含主键信息、独一约束、列属性、能否允许空值、列的最大长度、只读列和自动增量列,指定DataAdapter.MissingSchemaAction为MissingSchemaAction.AddWithKey。作为选择,你也可以在调用DataAdapter.Fill之前调用DataAdpater.FillSchema来保证填充DataSet时计划到位。调用FillSchema会给数据库添加额外的负担来输出Schema信息,所以最好的建议是指定DataSet的计划,或者在调用Fill之前设置DataAdapter的MissingSchemaAction。

    N.使用CommandBuilder

        CommandBuilder自动地生成基于DataAdapter的SelectCommand的DataAdapter的InsertCommand、UpdateCommand和DeleteCommand属性。提供SelectCommand执行一个简单的SELECT,以下信息引见使用CommandBuilder的最佳处理。

        I.在设计阶段不要使用CommandBuilder,否者产生DataAdapter Command属性的进程将会遭到干扰。如果你事后知道你的UPDATE、INSERT和DELETE声明的内容,你应该清楚地指定。一个最好的设计方案是为你的UPDATE、INSERT和DELETE创建存储过程,并在DataAdapter的Command属性中设置和使用它们。

        II.CommandBuilder使用Sele