惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
有赞技术团队
有赞技术团队
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
The Cloudflare Blog
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
Vercel News
Vercel News
IT之家
IT之家
MyScale Blog
MyScale Blog
博客园_首页
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
罗磊的独立博客

博客园 - 影

20070707销售日记(晴) 20070703销售日记(晴) 20070628销售日记(晴) 20070627销售日记(晴,有小雨) 长尾 销售人员 销售摘要 开始销售之路 《项目销售技巧》摘要 曾经我有一条狗 部署域控制器记录1 代理商、经销商、分销商的区别 日子照过,BLOG照写 融资租赁业浅析 心情随笔 ASP.NET2.0随笔 ASP.NET2.0 学习随笔 ASP.NET2.0的两种预编译模式 ASP.NET2.0页面事件
VS2005中使用强类型DataSet简化开发
· 2006-11-08 · via 博客园 - 影

在日常开发中,为了编写数据的增加、更新、修改、删除等功能而不得不面对枯燥的代码,做重复又重复的工作。.NET 2.0正式版的发布,对我们程序开发人员来说无疑是一件很大的喜事,Visual Studio 2005 的一些新的增强功能和ADO.NET 2.0的新特性让我们开发高可伸缩的多层数据库应用程序更加简单和快捷。

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

  下边通过一个例子来详细介绍如何通过vs2005来生成强类型DataSet简化开发流程,生成可伸缩性的多层数据库应用程序。

首先新建立一个Web网站项目,在[解决方案资源管理器]→[添加新项] →[数据集],命名为Authors.xsd,由于强类型DataSet需要放到App_Code目录,如果此时项目文件中没有App_Code目录, IDE会提示是否创建,我们选择"是"即可。

  此时IDE会自动打开我们刚才建立好的Authors.xsd文件,并且开始运行 TableAdapter配置向导,如果Web.Config没有数据库连结字符串,此时我们需要新建立一个连接:选择[新建连结] →[Microsoft SQL Server] →[选择系统自带的pubs数据库] →[将新建立的连结字符串保存到应用程序配置文件中]。

  在接下来的选择命令类型的时候,IDE出来三个选项来供用户选择访问呢数据库的形式:

  1、 使用SQL语句,如果是单个表,向导可以自动生成 Insert,Update和Delete语句。本例子也是使用的这种方法。

  2、 创建新的存储过程。同样如果是单个表,向导可以自动生成 Insert,Update和Delete语句。

  3、 使用现有存储过程。需要为每一个命令选择相应的现有存储过程。

我们这里选择[使用SQL语句] →[查询生成器] →[authors表,选择所有列],此时查询生成器会自动给我们生成 SQL语句(SELECT authors.* FROM authors)。[高级选项],可以选择是否生成Insert,Update和Delete语句,使用开放式并发来防止并发冲突,刷新数据表,用来验证 Insert和Update语句,为了能够更清晰的介绍使用方法,我们这里全部都不选择,而让我们以后根据需要自行添加。[选择要生成的方法] ,我们只需要使用[返回DataTable],其余的选项的对号去掉。

  此时创建向导会自动给我们生成"Select语句","数据表的映射",以及"Get方法"。我们创建的过程就结束了。这是我们发现DataSet.xsd会自动生成一个authors表和一个包含Get方法的数据集authorsTableAdapter。

同样,在我们建立好的数据表[authorsTableAdapter]右键→添加查询,参照上边的方法生成DeleteQuery(删除), InsertQuery(增加),UpdateQuery(更新)、SelectDetail(返回详细结果,使用Select(返回行)选项,生成一个只包括一条数据的数据集) 以及ScalarQuery(返回数据统计)。

  以下是生成的SQL语句,需要手工修改成自己需要的代码:

DeleteQuery:DELETE FROM [authors] WHERE ([au_id] = @Original_au_id)
InsertQuery: INSERT into authors (au_lname,au_fname,phone,address,city,state,zip,contract) values (@au_lname,@au_fname,@phone,@address,@city,@state,@zip,@contract)

UpdateQuery :UPDATE authors set au_lname=@au_lname,au_fname=@au_fname,phone=@phone,
address=@address,city=@city,state=@state,zip=@zip,contract=@contract where au_id=@au_id

SelectDetail:SELECT authors.* FROM authors where au_id=@au_id

ScalarQuery :SELECT COUNT(*) FROM authors

打开Default.aspx,并添加一个GridView控件,并且添加一个ObjectDataSource控件,配置 ObjecctDataSource的数据源,此时我们会发现在配置的时候系统已经认出来我们刚才建立的强类型DataSet了,[选择业务对象] →[authorsTableAdapters.authorstableAdapter] →[定义数据方法]分别选择Select,Update,Insert,Delete的方法,即我们刚才建立的DeleteQuery, InsertQuery,UpdateQuery,SelectDetail,ScalarQuery和系统生成的GetDate]。此时配置 ObejctDataSource就完工了。

把GridView的DataSourceID设置成ObjectDataSource,此时我们就已经建立好了完整的一个数据编辑功能。看是不是很简单。

  当然,我们在进行企业开发的时候,更习惯于在后台编辑,现在我就给出在后台进行手工编辑的代码:

//数据绑定部分
if (!Page.IsPostBack)
{
 authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
 //authorsTableAdapter就是我们建立的强类型的
 GridView1.DataSource = ta.GetData();
 GridView1.DataBind();
}
//删除数据
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
 authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
 ta.DeleteQuery(GridView1.DataKeys[e.RowIndex].Value);
}
//返回单条数据
authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
DataTable dt = ta.SelectDetail(Request.QueryString["id"].ToString());
if (dt.Rows.Count > 0)
 Response.Write(dt.Rows[0]["address"].ToString());
//返回数据统计
authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
Response.Write(ta.ScalarQuery().ToString());

  至此,我们不难发现,2005给我们的开发提供了飞跃性的改变。我们可以通过强类型数据集很方便快速的进行多层构架开发,并且提高开发速度