首页 > 范文大全 > 正文

NET平台下Typed DataSet的应用方法与技巧

开篇:润墨网以专业的文秘视角,为您筛选了一篇NET平台下Typed DataSet的应用方法与技巧范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:DataSet是两大组件之一,程序员在使用DataSet在开发中往往会出现编程复杂、容易出错并且调试困难等问题,该文通过研究typed dataset应用,探讨了Typed DataSet的优点、开发方法与使用技巧,以提高此类应用程序设计和运行的效率。

关键词:DataSet;Typed DataSet;;TableAdapter

中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2012)33-7931-02

是一组面向.net程序员公开数据访问服务的类,为创建分布式数据共享应用程序提供了一组丰富的组件。DataSet对象是支持的断开式、分布式数据方案的核心成员之一,但是DataSet从数据库中读取数据时,所得到的数据都是未经实例化的对象,设计和运行效率都比较低,而Typed DataSet提前定义了一些自己的列与表的泛型DataSet,这样编译器已经知道它们将会包含什么内容,从而简化了开发流程,生成可伸缩性的多层数据库应用程序。

1 Typed DataSet的优点

Typed DataSet根据事先定义好的Data Schema生成数据集,并对数据集中的字段实行强类型的约束,对DataTable的操作进行了封装。从数据库中读取数据填充到弱类型的DataSet时,是将数据行和列作为集合中的项公开了,所以需要通过位置索引(运行效率稍次)或字段名(运行效率最低)来引用,如ds.Tables[“Persons”].Rows[0][“UserName”]=”aaa”,如果列名写错了,写成了UseName,在编译时不会发现错误,只有在程序运行时才会提示:“列“UseName”不属于表 Persons”,因此,程序员在开发应用程序时必须记住列名,设计和运行效率都比较低。而Typed DataSet则是将数据集中的行和列作为对象的属性公开,可以根据对象的强类型属性名称来访问表和字段的值,adapter.GetData()[0].UserName=”aaa”,这样不仅避免了字段写错的情况,还大大提高了程序的运行效率。

DataTable中的数据类型只是在运行时进行类型检查,DataRow类的索引器显示为Object数据类型,代码在设计期间可以将任何数据类型的值赋值给该列,而编译器并不知道究竟会不会成功。从DataSet中检索的数据同样也是Object数据类型,引用时必须进行强制类型转换,string username= Convert.ToString(ds.Tables[“Persons”].Rows[0][“UserName”])。而Typed DataSet提供了类型检查,在设计时通过自定义字段名对字段进行智能感知,强类型对象的强类型属性都有明确的数据类型,在设计期间,编译器就可以检测出类型不兼容的问题,确保类型安全。

在为多张表创建Typed DataSet时,即Typed DataSet中包含多数据集,这多张表如果在数据库中已经建好了关系和约束,或者在XSD中对这些数据集建立了关系和约束,那么Type DataSet会生成相应的方法来反映这些关系和约束。但是在UnTyped DataSet中,需要自己来做,而且Typed DataSet填充数据的速度较快。

2 Typed DataSet的使用方法

Typed DataSet表现为一系列的类,包括派生于DataSet的Typed DataSet,派生于DataTable的Typed DataTable,派生于DataRow的Typed DataRow。创建Typed DataSet比较简单,使用VS提供的拖放工具就可以创建,先新建一个网站MyWebSite,然后在该站点上右击“添加新项”“数据集”,输入名字“DataSetLogin.xsd”,然后从服务器资源管理器中将要创建数据集的表T_Login拖放到设计界面就完成了Typed DataSet的创建,并将数据库的连接字符串写入了Web.Config文件中,同时还生成了SelectCommand、InsertCommand、UpdateCommand和DeleteCommand等属性,可以通过T_LoginTableAdapter对象的GetData()、Insert()、Update()和Delete()等方法来执行相应的操作。但是Typed DataSet所提供的方法很少,远远不能满足开发应用程序的需要,所以可以在Typed DataSet中添加自定义的SQL语句,在设计器的TableAdapter中右击“添加查询”,或是在DataTable上右击“添加”“查询”,可以通过SQL语句、新的或现有的存储过程去访问数据库。使用SQL语句访问数据库可以通过select返回行或返回单个值、update、delete、insert等类型来访问。

但是,在使用Typed DataSet开发应用程序时,如果需要添加自定义的SQL语句并选择通过SQL语句返回行时,需要注意生成Typed DataSet的那张表中最好所有的字段都选择,也就是使用默认选择或select *,如果只选择自己所关心的字段时,必须把定义该表时设置为非空、添加了约束的字段都选上,否则就会出现“未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值”这样的错误。

3 使用Typed DataSet进行批量操作

使用Typed DataSet进行批量操作时,比较耗时,因为生成的强类型的TableAdapter默认的每次调用方法都需要打开连接,执行代码、关闭连接,在对类型化的TableAdapter的Insert等方法进行跟踪时发现previousConnectionState属性,代码显示如果在操作之前连接状态没有打开才打开,操作之前连接状态是关闭才关闭,所以,需要在操作之前将手动的将连接打开,批量操作结束之后再关闭,这样批量操作就在一个连接中进行了,可以极大的提高执行效率。

4 结束语

Typed DataSet在开发应用程序的过程中弥补了DataSet容易出现代码复杂、易出错、调试困难、在编译期间难以发现错误、安全性比较低等弱点,虽然在执行时类型不能更改,但使用Typed DataSet对SQL语句进行了封装,快速的建立了数据访问层,使开发者可以更加关注业务逻辑,提高开发和运行效率。

参考文献:

[1] 丁士锋,朱毅,杨明羽.精通C#3.0与.NET3.5高级编程-LINQ.WCF.WPF.WF[M].北京:清华大学出版社,2009.

[2] 艾维耶4高级编程-涵盖C#和[M].北京:清华大学出版社,2010.