九五至尊娱乐场游戏 / 九五至尊娱乐场游戏 / 正文

20里使用强类型数据创建多层应用

by admin on 2018-10-09

  .NET 2.0正式版的正式发布,对我们程序开发人员来说无疑是一件很大的喜事,已经很多的人开始了解并使用.NET 2.0。Visual Studio 2005 的一些新的增强功能和ADO.NET 2.0的新特性让我们开发高可伸缩的多层数据库应用程序更加简单和快捷。本文将带领大家使用Visual Studio 2005来创建一个N层数据库应用的示例,并介绍一些NET 2.0和 Visual Studio 2005相关的知识。

  在.NET 1.1下就可以使用强类型数据集,可是在Visual Studio 2003里开发起来还是有一些不方便,在Visual Studio 2005里对DataSet的设计视图做了很大的改进,因为ADO.NET 2.0增加了TableAdapter对象,所以现在也可以在DataSet设计视图里添加DataTable的表适配器。以前的typedDataSets只是一些数据实体(哑对象,只有属性的类)的集合,并不能很方便的自我管理持久化,以及数据完整性验证等。现在可以很方便的实现这些。

  我们今天示范的这个例子是做一个显示消费者列表,并可以查看每个消费者订单细目的一个小程序。先用Visual Studio 2005创建一个typedDatasetSample.lib的类库项目,这个类库项目呢,我们主要保存一些强类型数据集,我们给这些强类型数据集加上一些自我持久的方法以及一些业务逻辑。然后呢我们就可以在构建桌面程序或者Web程序的时候使用它了,它就相当于我们的业务逻辑层,以后也许是通过Remoting来发布,也许通过Web服务发布,也许直接拷贝DLL来发布,一般把它放在Application Server上,以方便你的前台Smart Client,Asp.Net,以及移动应用来实例并使用。

  这是一个企业应用的核心,所以我们先构建它,然后就可以用Composite UI Application Block (CAB)来创建Smart Client界面,用Asp.net 2.0和微软的EnterpriseLibrary November 2005 CTP创建Web应用界面和移动应用界面。Asp.net 2.0加入了WebPart,MastPage,ObjectDataSource这几个控件大大简化了创建Web界面应用的过程,大大提高了开发者的用户体验(个人感觉是这样的,使用起来非常的舒服)。Asp.Net 2.0的设备自适应功能,设备过滤器让开发者构建移动应用和构建普通Web应用统一了起来,写一段程序可能不用任何修改就即可以在Internet Explorer上显示,也可以在Inernet Explorer for Pocket PC上显示,也可以在Openwave WAP Emulator上显示,新的MultiView,View,Pager控件也对你快速开发移动应用提供了很大的帮助。我推荐大家尽量使用微软推荐的工具和技术来实现自己的企业应用,毕竟微软还是更值得信赖的。

  在Server Explorer里展看依次展开localhost\sqlexpress节点,Tables节点,并把Customers表拖到数据集设计视图上。我们可以看到Visual Studio自动给我们添加了一个Customers的强类型数据集和一个叫CustomersTableAdapter的表适配器,并给这个表适配器自动添加了一个Fill的方法,这个方法是用来填充Customers数据集的。细心的朋友也许会发现在properties文件夹下添加了一个Settings.settings的文件,双击它可以看到里面保存了一个数据库连接字符串,这也是.NET 2.0的新特性,以后还可以以编程的方式来访问它,如果感兴趣也可以看看它自动生成的Settings.Designer.cs文件。

  右键在CustomersTableAdapter最上面单击并选择【Add Query】,选择【Use SQL statements】,点击【next】按钮这个选项是我们直接编写SQL语句,下面两个选项分别是创建一个新的存储过程或者使用一个新的存储过程。下一个界面是让你选择查询的类型,是插入操作还是删除操作还是更新操作等,我们先创建一个插入操作,选择【Insert】进入下一步,点击【Query Bulider】来可视化的生成SQL语句,这个查询生成器我想大家都很熟悉吧,比我的wawaCodePro要灵活多了,你可以很方便的创建出多表连接的复杂查询语句,以可以手动创建一些定制的Insert,Update等SQL语句,大家不要以为自己手工写复杂的SQL语句是很酷的事情,其实这个会使用这个查询生成器才厉害呢,Access里就有的。创建完语句后可以点击下面的【Excute Quert】按钮来测试你的语句是否正确,因为我们是一个需要参数的SQL语句,所以会弹出【Query parameters】窗口来让你输入参数。最后我们生成的语句如下。

  点击下一步键入自定义的方法名字“NewCustomer”,点【next】【finish】。如果要修改已经生成的查询,可以在要修改的查询上右键选择【Configure】以向导的方式来重新生成查询,或者选择相应查询,在【properties】面板里设置它的属性。分别以相同的方式添加删除和修改的查询。删除的语句如下:

  大家有兴趣可以看看自动在Customers.Designer.cs文件里生成的代码,一切的一切Visual Studio都给你生成了。定位到NewCustomer()方法可以看到它有个ert, false)]属性,这是设置让ObjectDataSource,BindSource等数据源控件自动绑定相应操作的属性,估计用的是一种Ioc(控制反转)的机制来实现的,你在设置ObjectDataSource的时候它的插入方法会自动绑定到这个方法上,一会儿就会看到。

  以上我们把显示消费者列表,以及消费者的修改,删除,添加等持久化操作代码生成了,我们还没有写一行代码,包括SQL语句哦。我们的数据实体(强类型数据集的ROW)虽然是哑对象,但是我们的表适配器可以以托管的形式来对这些实体进行CRUD持久化操作,类似于CMP(容器托管持久化,这里的表适配器就相当于容器)模式,然后我再告诉大家如何给数据实体添加自定义业务逻辑的方法(也许一个方法不能算是一个Case,但我感觉获取消费者的订单至少是一个Action吧)。当然了,我这里告诉大家的只是一种紧耦合的方法,如果你想设计灵活度比较高的高度可伸缩的应用,尽量使用一些Interface,Service,Event,properties(自定义属性)等技术来实现数据实体和数据实体具体操作的松散耦合,这样就可以做到我在UI层只引用Customer这个业务实体,然后调用Customer.GetOrderDetails()方法的时候,也许是在本地DLL里实现,也许是在用Rmorting方式连接到Application Server来实现,也许是通过一个叫做GetOrderDetailsByCustomerID的Web服务来实现的。

  现在我们来做一个订单细目的业务实体以及获取某个消费者订单细目的操作,因为Northwind数据库里没有这么一个直接的表来直观的显示订单细目,Orders只是一个交叉引用表,Order Details表也是一个交叉引用表,而我们的订单细目要显示订单号,消费者名称,产品名称,购买数量,单价,雇员名称等信息,而这些信息分布在多个表中,我们不能简单的把一个表拖放到数据集设计视图来生成相应的业务实体和表适配器。我们可以在数据集设计视图里的空白处右键选择【Add TableAdapter】,然后按向导在【Quert Builder】里把Customers,Orders,Order Details,Procucts,Employees五个表拖到数据表栏上,然后他们之间的外键关系会自动的可视化的指定,然后分别用鼠标选择几个表的某些字段,最后生成语句如下。

最新留言 divComments
    友情链接 divLinkage
      网站分类 divCatalog