ADO.NET最佳实践(中)[3]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 spidertan 的 blog

        当使用数据填充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使用selectcommand决定其他command属性的值。如果dataadapter的selectcommand本身发生变化,应该使用refreshschema去刷新command的属性。

        iii.只要dataadapter的command属性为空,commandbuilder就仅仅创建一个command,即使你明确地指定command的属性值,commandbuilder也不会重写,所以如果你想创建一个command并保留以前的属性设置,那么就把command的属性设置为null。

    o.sql的批声明和处理

        很多的数据库都支持在一条命令中使用综合查询或批处理或多条子命令。比如sql server中使用“;”。在一条命令中使用综合的多重命令可以有效地减少与数据库之间交互的次数并在你的应用程序中提高效率。比如在你的应用程序中使用批处理完成所有的删除(delete)任务等等。

        使用批处理确实提高了效率,但同时也在你的应用程序中管理更新dataset数据时增加了复杂性。要使得复杂性变简单化,你就要在你的dataset中为每个datatable创建一个dataadapter。

    p.使用多个表填充一个dataset

        如果你是用批处理从多个表返回数据并把这些数据填充到一个dataset,fill方法将会使用第一个表的表名命名第一个表,以后的表命名将会采用在第一个表的表名基础上加上一个递增的数字。举例,下面的代码将逐步说明fill方法的工作原理:

本文关键:数据库设计
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top