仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 971|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET网页设计利用 DataAdapter 和 DataSet 更新数据...

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:50:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。DataAdapter的Update办法可挪用来将DataSet中的变动剖析回数据源。与Fill办法相似,Update办法将DataSet的实例和可选的DataTable工具或DataTable称号用作参数。DataSet实例是包括已作出的变动的DataSet,而DataTable标识从个中检索变动的表。

当挪用Update办法时,DataAdapter将剖析已作出的变动并实行响应的命令(INSERT、UPDATE或DELETE)。当DataAdapter碰到对DataRow的变动时,它将利用InsertCommand、UpdateCommand或DeleteCommand来处置该变动。如许,您就能够经由过程在计划时指天命令语法并在大概时经由过程利用存储历程来只管进步ADO.NET使用程序的功能。在挪用Update之前,必需显式设置这些命令。假如挪用了Update但不存在用于特定更新的响应命令(比方,不存在用于已删除行的DeleteCommand),则将激发非常。

Command参数可用于为DataSet中每一个已修正行的SQL语句或存储历程指定输出和输入值。有关更多信息,请参阅将参数用于DataAdapter。

假如DataTable映照到单个数据库表或从单个数据库表天生,则能够使用CommandBuilder工具主动天生DataAdapter的DeleteCommand、InsertCommand和UpdateCommand。有关更多信息,请参阅主动天生的命令。

Update办法会将变动剖析回数据源,可是自前次添补DataSet以来,其他客户端大概已修正了数据源中的数据。若要利用以后数据革新DataSet,请再次利用DataAdapter添补(Fill)DataSet。新即将增加到该表中,更新的信息将并进现有行。

若要处置大概在Update操纵过程当中产生的非常,可使用RowUpdated事务在这些非常产生时呼应行更新毛病(请参阅利用DataAdapter事务),大概能够在挪用Update之前将DataAdapter.ContinueUpdateOnError设置为true,然后在Update完成时呼应存储在特定行的RowError属性中的毛病信息(请参阅增加和读取行毛病信息)。

注重假如对DataSet、DataTable或DataRow挪用AcceptChanges,则将使某DataRow的一切Original值被该DataRow的Current值改写。假如已修正将该行标识为独一行的字段值,那末当挪用AcceptChanges后,Original值将不再婚配数据源中的值。
以下示例演示怎样经由过程显式设置DataAdapter的UpdateCommand来实行对已修正行的更新。请注重,在UPDATE语句的WHERE子句中指定的参数设置为利用SourceColumn的Original值。这一点很主要,由于Current值大概已被修正,而且大概不婚配数据源中的值。Original值是曾用来从数据源添补DataTable的值。

SqlClient
[VisualBasic]
DimcatDAAsSqlDataAdapter=NewSqlDataAdapter("SELECTCategoryID,CategoryNameFROMCategories",nwindConn)

catDA.UpdateCommand=NewSqlCommand("UPDATECategoriesSETCategoryName=@CategoryName"&_
"WHERECategoryID=@CategoryID",nwindConn)

catDA.UpdateCommand.Parameters.Add("@CategoryName",SqlDbType.NVarChar,15,"CategoryName")

DimworkParmAsSqlParameter=catDA.UpdateCommand.Parameters.Add("@CategoryID",SqlDbType.Int)
workParm.SourceColumn="CategoryID"
workParm.SourceVersion=DataRowVersion.Original

DimcatDSAsDataSet=NewDataSet
catDA.Fill(catDS,"Categories")

DimcRowAsDataRow=catDS.Tables("Categories").Rows(0)
cRow("CategoryName")="NewCategory"

catDA.Update(catDS)
[C#]
SqlDataAdaptercatDA=newSqlDataAdapter("SELECTCategoryID,CategoryNameFROMCategories",nwindConn);

catDA.UpdateCommand=newSqlCommand("UPDATECategoriesSETCategoryName=@CategoryName"+
"WHERECategoryID=@CategoryID",nwindConn);

catDA.UpdateCommand.Parameters.Add("@CategoryName",SqlDbType.NVarChar,15,"CategoryName");

SqlParameterworkParm=catDA.UpdateCommand.Parameters.Add("@CategoryID",SqlDbType.Int);
workParm.SourceColumn="CategoryID";
workParm.SourceVersion=DataRowVersion.Original;

DataSetcatDS=newDataSet();
catDA.Fill(catDS,"Categories");

DataRowcRow=catDS.Tables["Categories"].Rows[0];
cRow["CategoryName"]="NewCategory";

catDA.Update(catDS);
OleDb
[VisualBasic]
DimcatDAAsOleDbDataAdapter=NewOleDbDataAdapter("SELECTCategoryID,CategoryNameFROMCategories",nwindConn)

catDA.UpdateCommand=NewOleDbCommand("UPDATECategoriesSETCategoryName=?"&_
"WHERECategoryID=?",nwindConn)

catDA.UpdateCommand.Parameters.Add("@CategoryName",OleDbType.VarChar,15,"CategoryName")

DimworkParmAsOleDbParameter=catDA.UpdateCommand.Parameters.Add("@CategoryID",OleDbType.Integer)
workParm.SourceColumn="CategoryID"
workParm.SourceVersion=DataRowVersion.Original

DimcatDSAsDataSet=NewDataSet
catDA.Fill(catDS,"Categories")

DimcRowAsDataRow=catDS.Tables("Categories").Rows(0)
cRow("CategoryName")="NewCategory"

catDA.Update(catDS)
[C#]
OleDbDataAdaptercatDA=newOleDbDataAdapter("SELECTCategoryID,CategoryNameFROMCategories",nwindConn);

catDA.UpdateCommand=newOleDbCommand("UPDATECategoriesSETCategoryName=?"+
"WHERECategoryID=?",nwindConn);

catDA.UpdateCommand.Parameters.Add("@CategoryName",OleDbType.VarChar,15,"CategoryName");

OleDbParameterworkParm=catDA.UpdateCommand.Parameters.Add("@CategoryID",OleDbType.Integer);
workParm.SourceColumn="CategoryID";
workParm.SourceVersion=DataRowVersion.Original;

DataSetcatDS=newDataSet();
catDA.Fill(catDS,"Categories");

DataRowcRow=catDS.Tables["Categories"].Rows[0];
cRow["CategoryName"]="NewCategory";
catDA.Update(catDS);
主动递增列
假如来自数据源的表包括主动递增列,则可使用由数据源天生的值添补DataSet中的列,办法是经由过程以存储历程输入参数的情势前往主动递增值并将其映照到表中的一列,大概利用DataAdapter的RowUpdated事务。有关示例,请参阅检索“标识”或“主动编号”值。

可是,DataSet中的值大概会与数据源中的值分歧步并招致不测的举动。比方,请思索一个包括主动递增主键列CustomerID的表。假如在该DataSet中增加两个新客户,它们将收到主动递增的CustomerId值1和2。在向DataAdapter的Update办法传送第二个客户行时,新增加的行会收到数据源中的主动递增CustomerID值1,该值与DataSet中的值2不婚配。当DataAdapter利用前往值添补DataSet中的行时,因为第一个客户行的CustomerID已是1,因而将产生束缚抵触。

为了不这类举动,倡议在利用数据源中的主动递增列和DataSet中的主动递增列时,在DataSet中创立AutoIncrementStep为-1且AutoIncrementSeed为0的列,并确保数据源天生从1入手下手并以正步长值递增的主动递增标识值。如许,DataSet将为主动递增值天生正数,这些正数不会与数据源所天生的正主动递增值产生抵触。另外一种办法是利用Guid范例的列而不是主动递增列。天生Guid值的算法在DataSet中天生的Guid从不会与数据源天生的Guid不异。有关界说DataTable中的列的更多信息,请参阅界说数据表的架构。

拔出、更新和删除的排序
在很多情形下,以何种按次向数据源发送经由过程DataSet作出的变动是相称主要的。比方,假如已更新现有行的主键值而且增加了具有新主键值的新行,则务需要在处置拔出之前处置更新。

可使用DataTable的Select办法来前往仅援用具有特定RowState的DataRow数组。然后能够将前往的DataRow数组传送到DataAdapter的Update办法来处置已修正的行。经由过程指定要更新的行的子集,能够把持处置拔出、更新和删除的按次。

比方,以下代码确保起首处置表中已删除的行,然后处置已更新的行,然后处置已拔出的行。

[VisualBasic]
DimupdTableAsDataTable=custDS.Tables("Customers")

Firstprocessdeletes.
custDA.Update(updTable.Select(Nothing,Nothing,DataViewRowState.Deleted))

Nextprocessupdates.
custDA.Update(updTable.Select(Nothing,Nothing,DataViewRowState.ModifiedCurrent))

Finally,processinserts.
custDA.Update(updTable.Select(Nothing,Nothing,DataViewRowState.Added))
[C#]
DataTableupdTable=custDS.Tables["Customers"];

//Firstprocessdeletes.
custDA.Update(updTable.Select(null,null,DataViewRowState.Deleted));

//Nextprocessupdates.
custDA.Update(updTable.Select(null,null,DataViewRowState.ModifiedCurrent));

//Finally,processinserts.
custDA.Update(updTable.Select(null,null,DataViewRowState.Added));

我有个同学,他是搞Java的,他给我说“Java不是效率低,而是速度慢。”,我不是搞Java的,我实在想不透这句话的含义,难道执行速度不就是效率低吗?难道执行速度慢还成效率高了?
沙发
发表于 2015-1-20 05:37:41 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
老尸 该用户已被删除
板凳
发表于 2015-1-28 18:58:47 | 只看该作者
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-5 22:35:05 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
柔情似水 该用户已被删除
5#
发表于 2015-2-13 23:44:28 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
活着的死人 该用户已被删除
6#
发表于 2015-3-4 03:15:48 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
透明 该用户已被删除
7#
发表于 2015-3-11 15:44:34 | 只看该作者
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
简单生活 该用户已被删除
8#
发表于 2015-3-19 01:31:06 | 只看该作者
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
再现理想 该用户已被删除
9#
发表于 2015-3-27 02:08:05 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
蒙在股里 该用户已被删除
10#
 楼主| 发表于 2015-3-27 02:08:05 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-8 08:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表