All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
使ASP.NET中的数据库操作变得简单_[Asp.Net教程]
在Windows系统上安装PHP应用程序服务器_php资料_编程技术
delphi滚动条组件(TScrollBar)使用方法
SQL Server 2000 标准版安装_[SQL Server教程]
c#中域和属性的概念
如何在服务端(Page.Write)调用自定义的JS方法_JavaScript技术_编程技术
初学者接触HTML了解一些HTML标记(3)_[Html教程]
PHP技巧:PHP脚本编程中的文件系统函数库_php资料_编程技术
C#中MessageQueue组件应用实例
asp.net2.0网站基础之创建ASP.NET 2.0网站
Reading number is top 10 pictures
治疗多发性骨髓瘤的特效药,一万二一支
Hunan province aizhai super-large suspension bridge open to traffic and 4 world first1
乳娘帕梅拉安德森4
China's family planning commission forced abortions 270 million newborns for 30 years
2012 national geographic daily picture4
30 beautiful school beauty1
The woman fight much more than men
囚犯暴乱了咋办?
Absolutely shocked. National geographic 50 animal photographys7
修电脑也有这么漂亮的美女
Download software ranking
仙剑奇侠传98版歌曲
Kung fu panda - the secret of the teacher
Boxer's Top ten classic battle7
Eclipse 4.2.2 For Win32
dreamweaver8中文版
WebService在.NET中的实战应用教学视频 → 第2集
Unix video tutorial18
Boxer vs Yellow1
好色的外科大夫
1400篇各类破解文章
delv published in(发表于) 2014/1/8 7:01:32 Edit(编辑)
ASP.NET2.0数据操作之创建数据访问层(3)_[Asp.Net教程]

ASP.NET2.0数据操作之创建数据访问层(3)_[Asp.Net教程]

ASP.NET2.0数据操作之创建数据访问层(3)_[Asp.Net教程]

 第四步:插入,更新和删除数据

  常用的插入,更新和删除数据的模式有两种。第一种模式,我称之为DB直接模式,涉及的方法被调用时,会向数据库里发出一个INSERT, 或UPDATE,或DELETE命令,这个命令只对单个数据库记录做操作。象这样的方法一般接受一系列对应于插入,更新或删除的值的标量参数(譬如整数,字符串,布尔值,日期时间等)。譬如,用这个模式来操作Products表的话,删除方法会接受一个整数参数,代表所需要删除的记录的ProductID,而插入方法则会接受一个对应于ProductName的字符串,对应 于UnitPrice的decimal值,对应于UnitsOnStock的整数等等。


图 21: 每个插入,更新,和删除请求都被立刻发送到数据库

  另外一个模式,我称之为批更新模式,可以在一个方法调用里更新整个DataSet,或者整个DataTable,或 者一个DataRow集合。在这个模式里,开发人员在一个DataTable中删除,插入,修改DataRow,然后把这 些DataRow或整个DataTable传给一个更新方法。然后这个方法会轮循传入的DataRow们,通过DataRow的RowState属 性属性来决定这些DataRow是否被改动过,或是新记录,或是被删除的记录,然后为每个记录发出合适的 数据库命令。


图 22: 在Update 方法调用之后,所有的变动都与数据库同步了

  在默认情形下,TableAdapter采用批更新模式,但也支持DB直接模式。因为我们在创建我们的TableAdapter时的高级选项中选择了“生成插入,更新,和删除语句” 这个选项,ProductsTableAdapter 包含了一个 Update()方法,该方法实现了批 更新模式。具体地说,TableAdapter包含了一个Update()<昀敳獴搨 ???oЁCODE> 方法,可以传入一个强类型 的DataSet,或者一个强类型的DataTable,或者一个和多个DataRow。假如你在一开始创建TableAdapter时的选项中没有清除“生成DB直接方法(GenerateDBDirectMethods)”复选框的话,DB直接模 式也会通过Insert(),Update()和Delete()方法来实现。

  这两种数据修改模式都使用 了TableAdapter的InsertCommand,UpdateCommand, 和DeleteCommand属性来向数据库发出对应 的INSERT,UPDATE和DELETE命令。你可以在DataSet设计器里点击TableAdapter,然后在属性窗口查看和改 动InsertCommand,UpdateCommand, 和DeleteCommand属性。(确 认你选择了TableAdapter,并且ProductsTableAdapter对象是属性窗口中下拉框里被选中的项)


图23: TableAdapter包含InsertCommand,UpdateCommand, 和DeleteCommand等属性

  想查看或改动这些数据库命令的属性的话,点击CommandText子属性,这会启动对应的查询 生成器。


图 24: 在查询生成器里配置插入,更新,删除语句

  下面的编码例子示范了如何使用批更新模式来把没被终止的,且库存等于或少于25个单元的产品的价格加 倍:


C#
1 
2
3
4
5
6
7
8
9
10
11
12

NorthwindTableAdapters.ProductsTableAdapter 
productsAdapter =
new NorthwindTableAdapters.ProductsTableAdapter();
// For each product, double its price if it is not discontinued
and
// there are 25 items in stock or less
Northwind.ProductsDataTable products = productsAdapter.GetProducts();
foreach (Northwind.ProductsRow product in products)
if (!product.Discontinued && product.UnitsInStock
<= 25)
product.UnitPrice *= 2;
// Update the products
productsAdapter.Update(products);


  下面的编码示范如何使用DB直接模式删除一个产品,更新一个产品,然后添加一个新的产品:


C#
1 
2
3
4
5
6
7
8
9
10
11
12

NorthwindTableAdapters.ProductsTableAdapter 
productsAdapter = new
NorthwindTableAdapters.ProductsTableAdapter();
// Delete the product with ProductID 3
productsAdapter.Delete(3);
// Update Chai (ProductID of 1), setting the UnitsOnOrder to
15
productsAdapter.Update("Chai", 1, 1, "10 boxes x 20 bags",
18.0m, 39, 15, 10, false, 1);
// Add a new product
productsAdapter.Insert("New Product", 1, 1,
"12 tins per carton", 14.95m, 15, 0, 10, false);

  创建自定义的插入,更新,删除方法

  用DB直接法生成的Insert(), Update(),和Delete()方法有时 候会感觉有点不方便,特别是当数据表有许多字段的时候。看一下前面这个编码例子,没有IntelliSense的帮 助的话,不是很清楚Products表的哪个字段对 应Update()和Insert()方法中的哪个输入参数。有时候我们只要更新一到二个字 段或者需要一个自定义的Insert()方法,这个方法需要返回刚插入的记录 的IDENTITY(自增)的字段值。

  要创建这样的自定义方法,回到DataSet设计器。在TableAdapter上按右鼠标,选择“添加查询”,然后回 到TableAdapter配置向导。在第二屏上,我们可以指明要生成的查询的类型。让我们生成一个添加新 的product(产品)记录,然后返回新添加记录的ProductID值的方法。因此,选择生成一个插 入(INSERT)型查询。


图25: 创建一个给Products表添加新记录的方法

  下一个屏显示InsertCommand的CommandText属性。在查询语句后面,增添一 个SELECT SCOPE_IDENTITY()的查询,这查询将返回当前同一个操作范围内插 入IDENTITY字段的最后那个identity 值。(详见技术文档中关 于SCOPE_IDENTITY()的内容以及为什么你应该使用SCOPE_IDENTITY()而不是 @@IDENTITY)。确认在添加SELECT语句前,你在INSERT语句后面添一个分号 。


图26: 增添查询返回SCOPE_IDENTITY()值

  最后,把这个新方法命名为InsertProduct。


图 27:放方法名字设成InsertProduct

  当你返回DataSet设计器时,你将看到ProductsTableAdapter多了一个新的方 法,InsertProduct。如果对应Products表的每个字段,这个新的方法没有对应的参数的话,非常可能的原因是,你忘了给INSERT语句的结尾添加一个分号(semi-colon)。重新配 置InsertProduct方法,确认在INSERT和SELECT语句间有个分号。

  在默认情形下,插入方法调用的是非查询(non-query)方法,意即,他们只返回受影响的记录数。但是,我们想要让InsertProduct方法返回一个查询返回的值,而不是受影响的记录数。这可以把InsertProduct方法的ExecuteMode属性改 成Scalar(标量)来实现。


图 28:把ExecuteMode属性改成Scalar

  下面的编码示范如何使用这个新的InsertProduct方法:


C#
1 
2
3
4
5
6
7

NorthwindTableAdapters.ProductsTableAdapter 
productsAdapter = new
NorthwindTableAdapters.ProductsTableAdapter();
// Add a new product
int new_productID =
Convert.ToInt32(productsAdapter.InsertProduct("New
Product", 1, 1, "12 tins per carton",
14.95m, 10, 0, 10, false));
// On second thought, delete the product
productsAdapter.Delete(new_productID);






添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.