仓酷云

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

[学习教程] ASP.NET网站制作之ASP.NET 2.0初级数据处置之抵触检测

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

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

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

x
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。asp.net|初级|数据<P>  后面我们提到,数据绑定控件把传送给数据源的值寄存在互相自力的Keys、Values(新值)和OldValues字典中。在默许情形下,SqlDataSource和ObjectDataSource会疏忽OldValues字段,只利用Keys和Values。这类举动是由数据源的ConflictDetection属性检测的,在默许情形下这个属性的值被设置为OverwriteChanges。OverwriteChanges形式意味着"为了更新或删除纪录,仅仅婚配主键值"。这类操纵意味着,纪录的更新或删除是不思索该纪录的上层值是不是改动过了。在一般情形下,幻想的形态是,只要当数据行的值与最后选择的值完整婚配的时分,才让Update或Delete操纵乐成。在这类幻想情形下,假如别的一个用户在你选择某一行和更新该行的之间也更新了这一行,你的更新操纵就会失利。经由过程把ConflictDetection属性设置为CompareAllValues,数据源也撑持这类操纵。在这类形式下,数据源会把OldValues使用到命令或办法上,它会利用这些值来确保在更新或删除纪录之前,更新或删除操纵必需与纪录的一切值都婚配。你还必需把OldValuesParameterFormatString属性设置为一个无效的.NET框架组件格局化字符串(比方"original_{0}"),来指明OldValues和Keys字典中的参数怎样从头定名以便与NewValues参数辨别开来。

  上面的代码示例显现了SqlDataSource控件在OverwriteChanges和CompareAllValues形式下利用的典范的SQL命令。ID字段被假定为主键字段。请注重,前面一个命令在WHERE子句中对照数据行的一切原始值,而不是仅仅对照主键。在这类情形下,数据源的OldValuesParameterFormatString必要被设置为"original_{0}"。

SELECT[ID],[Name],[Address]from[Contacts]
--OverwriteChanges
UPDATE[Contacts]SET[Name]=@Name,[Address]=@AddressWHERE[ID]=@ID
DELETEFROM[Contacts]WHERE[ID]=@ID

--CompareAllValues
UPDATE[Contacts]SET[Name]=@Name,[Address]=@AddressWHERE[ID]=@original_ID
AND[Name]=@original_NameAND[Address]=@original_Address
DELETEFROM[Contacts]WHERE[ID]=@original_IDAND[Name]=@original_Name
AND[Address]=@original_Address
  请注重,Insert操纵不必要OldValues,ConflictDetection只对Update和Delete操纵成心义。

  上面的例子演示了抵触产生时的举动。为了运转这个例子,你必需在两个自力的扫瞄器窗口中翻开例子的两个实例(两次点击"RunSample")。接着在两个窗体的统一行上都点击"Edit"按钮,使该行进进编纂形式。在第一个窗口中改动一个值并点击"Update",请注重这个更新是乐成的。在第二个窗口中,在该行中输出一个新值并点击"Update",这个更新操纵没有乐成,由于上层数据行的值已被第一个更新操纵改动过了。这个示例检测了Updated或Deleted事务参数的AffectedRows属性,它为0确认了抵触产生了。

<scriptrunat="server">
ProtectedSubSqlDataSource1_Updated(senderAsObject,eAsSqlDataSourceStatusEventArgs)
 Ife.AffectedRows=0Then
  Response.Write("Rowchanged,updateaborted<br/>")
 EndIf
EndSub

ProtectedSubSqlDataSource1_Deleted(senderAsObject,eAsSqlDataSourceStatusEventArgs)
 Ife.AffectedRows=0Then
  Response.Write("Rowchanged,deleteaborted<br/>")
 EndIf
EndSub
</script>
  当Update或Delete利用模板化UI的时分,利用了Bind语法的双向(two-way)数据绑定字段的旧值城市被保存。关于Delete来讲,这意味着在ItemTemplate中你必需给数据绑定的值利用Bind语法,其目标是为了保存删除操纵所必要的旧值。上面的例子演示了这类手艺。

<asp:GridView……>
 <Columns>
  <asp:CommandFieldShowDeleteButton="True"ShowEditButton="True"/>
  <asp:TemplateFieldHeaderText="ContactID"InsertVisible="False"SortExpression="ContactID">
   <ItemTemplate>
    <asp:LabelID="Label1"runat="server"Text=<%#Bind("ContactID")%>></asp:Label>
   </ItemTemplate>
   <EditItemTemplate>
    <asp:LabelID="Label3"runat="server"Text=<%#Eval("ContactID")%>></asp:Label>
   </EditItemTemplate>
  </asp:TemplateField>
  <asp:TemplateFieldHeaderText="ContactName"SortExpression="ContactName">
   <ItemTemplate>
    <asp:LabelID="Label2"runat="server"Text=<%#Bind("ContactName")%>></asp:Label>
   </ItemTemplate>
   <EditItemTemplate>
    <asp:TextBoxID="TextBox1"runat="server"Text=<%#Bind("ContactName")%>></asp:TextBox>
   </EditItemTemplate>
  </asp:TemplateField>
 </Columns>
</asp:GridView>
<P>  你能够和气地处置抵触检测毛病,能够经由过程提醒用户上层数据被改动了,向用户显现改动过的值,让用户选择提交或保持本人的操纵。上面的例子演示处置抵触检测的一种可行办法。请注重,DetailsView的RowUpdated事务参数传送了可用于检测用户输出的值的字典。你还能够设置这个事务参数的KeepInEditMode属性,利用户在决意怎样处置抵触时代,DetailsView处于编纂形式。这个例子所实验办法与下面一个例子相似,同时翻开两个窗口来创立抵触更新。

ProtectedSubDetailsView1_ItemUpdated(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.DetailsViewUpdatedEventArgs)
 Ife.AffectedRows=0Then
  使DetailsView处于编纂形式并与数据库同步
  e.KeepInEditMode=True
  DetailsView1.DataBind()
 
  用用户输出的值从头添补DetailsView
  DimtAsTextBox
  t=DetailsView1.Rows(1).Cells(1).Controls(0)
  t.Text=e.NewValues("OrderDate")
  t=DetailsView1.Rows(2).Cells(1).Controls(0)
  t.Text=e.NewValues("ShipCountry")

  ErrorPanel.Visible=True
 Else
  ErrorPanel.Visible=False
 EndIf
EndSub

ProtectedSubDetailsView1_ModeChanging(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.DetailsViewModeEventArgs)
 Ife.CancelingEdit=TrueAndAlsoErrorPanel.Visible=TrueThen
  ErrorPanel.Visible=False
 EndIf
EndSub
  利用ObjectDataSource的时分,情形也相似。请注重,因为数据源的ConflictDetection属性被设置为CompareAllValues,数据源将查找一个可承受Contact工具的每一个字段的原始值的UpdateContact重载。

  你还能够同时利用DataObjectTypeName属性和CompareAllValues。在这类情形下,ObjectDataSource查找仅承受两个参数(都是Contact)的UpdateContact重载。第一个参数是寄存新值的Contact工具,第二个参数是寄存旧值的Contact工具。另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。
不帅 该用户已被删除
沙发
发表于 2015-1-18 09:17:33 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
乐观 该用户已被删除
板凳
发表于 2015-1-21 15:30:14 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
若天明 该用户已被删除
地板
发表于 2015-1-30 20:28:49 | 只看该作者
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
第二个灵魂 该用户已被删除
5#
发表于 2015-3-5 11:40:41 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
只想知道 该用户已被删除
6#
发表于 2015-3-12 05:04:08 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
分手快乐 该用户已被删除
7#
发表于 2015-3-19 18:08:08 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-8 13:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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