.NET“类型化数据集(Typed Dataset)”使用心得 - 1. 概述

1.1.  DataSet

DataSet (数据集)是 ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。

DataSet的使用方法,请自行查找,本文仅讨论Typed DataSet。

1.2.  Typed DataSet文件结构

Typed DataSet,在Visual Studio中,以.xsd作为主文件,此文件用于记录表格结构,数据类型,查询字符串等信息。在编译时,此文件会先被转为自动转为.cs文件之后进行编译。

在项目中,还会存在.xsc文件和.xss文件。前者似乎可以用来设置Table UI,但是我没有查到相关信息,也从用过;后者是用来存储在VisualStudio中的视图,不会影响实际执行。

Web Site项目中,只包含上述三个文件,在Web Application项目中,还会包含.cs和.Designer.cs两个文件。前者供开发人员写自己的方法和属性,后者由系统自动生成,建议不要改动(同其他的.Designer.cs一样)。

1.3.  优点

一:在使用DataSet时,需要多行代码才能执行查询,包括设置Connection,QueryString,Command等等,查询开始之前和结束之后,还要手动执行Connection的Open()和Close(),如果不慎忘记执行,将会导致运行错误。在TypedDataSet中,只需要使用2行代码就可以执行一次查询(不计逐项取出数据)。

类似于:

MyDataSetTableAdapters.MyTableAdaptertaMyTable = new MyDataSetTableAdapters.MyTableAdapter();
MyDataSet.MyTable dtMyTable =taMyTable.GetData();

确实,通过封装,自己写DataSet代码也可以达到同样功能,但是不要忘记,VS是会自动生成代码的,只需要拖动几次就可以了。

 

二:“半”自动化生成代码。如前面所说,只需要一次拖动,就可以生成一个Table的基本功能,包括Select, Update,Delete和Insert函数。

三:类型检查。如果开发者尝试将一个字符串放入数据库中应当为整型的列,在使用TypedDataSet时,会产生一个编译错误;而普通DataSet只会在运行时才产生错误。

四:逐键提示(键入提示)。在使用时,Typed DataSet可以充分利用VS的逐键提示功能。例如,取出myDataSet中的MyLongLongNameTable中的第1行MyVeryVeryVeryVeryLongNameColumn列中的数据,普通的DataSet要写作:

myDataSet.Tables["MyLongLongNameTable"].Rows[0]["MyVeryVeryVeryVeryLongNameColumn"];

而在Typed DataSet中,写作:

myDataSet.MyLongLongNameTable.Rows[0]. MyVeryVeryVeryVeryLongNameColumn;

在第一个和第三个点输入之后,VS都会弹出提示框,让开发者可以减少键入数量,同时避免键入错误。另外,使用普通的DataSet,通常要加上强制类型转换的代码,但是TypedDataSet 不用。

五:绑定

其实这个不能算作Typed DataSet的优点,因为在后台,这部分代码,和普通的DataSet用起来没什么区别。

在asp.net中,Typed DataSet可以在aspx中作为ObjectDataSource绑定给GridView或者DropDownList之类的控件,而普通的DataSet只能在后台绑定。

哦,这里 需要提一下SqlDataSource。这个控件可以同样简便地将数据库数据绑定到控件上。相较而言,这个使用起来更灵活,但是如果重复使用的话,不便于代码的集中控制,也没有重用性。

 

1.4.  缺点

Typed DataSet同样有缺点,这些缺点主要体现在开发上。

一:VS视图没有自动排列功能,且难以查找。当一个TypedDataSet中包含较多个表的时候,会占用很大的空间,以至于必须拖动滚动条才能看到其他的表。表之间可能重叠,必须手动将它们拖开。如果开发者修改了某个表的结构,或者添加了QueryString,那么很可能需要拖动数个表,才能重新保证视图美观。

另外,如果在VS中使用“查找”功能,只能查到XML格式的代码(.xsd文件中),却无法在视图页面找到需要的表或者列。只能用肉眼一个一个地寻找。

二:愚蠢的默认设置。数据库中,某列可以是NULL,那么当尝试取出这个NULL时,会怎样呢?默认设置是抛出异常。其实,我们需要它直接返回NULL会常见,另外在字符串时,也经常需要它返回空字符串,而不是抛出异常。开发者可以对此项进行设定,但是每次修改表的结构,它都会变回默认值,需要重新设定。

另外一个例子,我写了一个查询:

SELECT  ID, Type_Code FROM Type WHERE Type_Code =@Type_Code OR @Type_Code=’ALL’

也就是说,我输入一个Type_Code,我希望查到所有这个Type_Code的行;假设说我输入“ALL”我希望获得所有行。

问题在于,假设说Type_Code列是varchar(2),那么@Type_Code也会被默认设定为长度是2,“ALL”就会被截断(无法设置,无错误提示)以至于无法获得需要的结果。此项同样可以设置,同样地,它也会在改变表格结构之后,自动变回默认值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值