仓酷云

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

[学习教程] ASP.NET网页设计ASP.NET 2.0初级数据处置之利用参数

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

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

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

x
语言是不是不是最重要的?asp.net|初级|数据<P>  你能够处置Select、Update、Insert、Delete和Filter的事务,以考证并处置传送给这些操纵的参数值。为了到达这个方针,数据绑定的控件和数据源控件都表露了得当的事务。比方,在GridView的Updating事务中,你就能够看到Keys、NewValues和OldValues字典中的参数称号和值,而它们将会被传送到数据源。在数据源一端,你能够处置SqlDataSource的Updating事务,看到这些使用到上层命令工具的参数,而这些命令将会实行以完成相干操纵。相似的,你能够处置ObjectDataSource的Updating事务来检察或改动参数字典,而这些字典将用于剖析UpdateMethod的得当操纵。你可使用这些事务来增添或删除字典或命令的参数、改动它们的值、大概复杂地考证参数的输出格局是不是准确。

  请注重:你特别必要考证Filtering事务的参数输出,由于在它使用到相干的DataView工具的FilterExpression(过滤器表达式)之前不会取得SQL编码(encoded)。

  上面的示例演示了处置多个数据控件的事务来列举那些经由过程事务参数传送的参数汇合。请注重,这个示例把与OrderID主键字段相干联的绑定字段的InsertVisible属性设置为假,这是由于鄙人层数据库中OrderID是一个标识列,不该该传送给Insert操纵(当拔出产生的时分数据库主动地增添这个值)。同时请注重,在DataKeyNames中,OrderID字段被标志为主键,因而这个字段的原始值保存在数据绑定控件所传送的Keys字典中。用户输出控件的值都传送进NewValues字典(除那些标志了ReadOnly=false的字段)。非键字段的原始值由数据绑定控件保存在OldValues字典中,以供传送给数据源。这些参数值都被SqlDataSource依照NewValues、Keys和OldValues的序次附加到命令上,只管在默许情形下,当ConflictDetection被设置为OverwriteChanges的时分,数据源不会附加OldValues。你能够在前面的"利用抵触检测"部分看到数据源是怎样利用OldValues的。

<scriptrunat="server">
ProtectedSubEnumerateDictionary(ByValdictionaryAsSystem.Collections.Specialized.IOrderedDictionary)
 DimentryAsDictionaryEntry
 ForEachentryIndictionary
  Response.Write("<b>"&Server.HtmlEncode(entry.Key)&"</b>="&Server.HtmlEncode(entry.Value)&"("&Server.HtmlEncode(entry.Value.GetType().Name)&")<br/>")
 Next
EndSub

ProtectedSubEnumerateCommandParameters(ByValcommandAsSystem.Data.Common.DbCommand)
 Response.Write("<br/>Parameterorderindatasource...<br/>")
 DimparamAsSystem.Data.Common.DbParameter
 ForEachparamIncommand.Parameters
  Response.Write("<b>"&Server.HtmlEncode(param.ParameterName)&"</b>="&Server.HtmlEncode(param.Value)&"("&Server.HtmlEncode(param.Value.GetType().Name)&")<br/>")
 Next
EndSub

ProtectedSubDetailsView1_ItemUpdating(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.DetailsViewUpdateEventArgs)
 Response.Write("<br/>NewValuespassedfromDetailsView...<br/>")
 EnumerateDictionary(e.NewValues)
 Response.Write("<br/>KeyspassedfromDetailsView...<br/>")
 EnumerateDictionary(e.Keys)
 
 Response.Write("<br/>OldValuespassedfromDetailsView...<br/>")
 EnumerateDictionary(e.OldValues)
EndSub

ProtectedSubSqlDataSource1_Updating(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
 EnumerateCommandParameters(e.Command)
 e.Cancel=True
 Response.Write("<br/>Updatecanceled")
EndSub
  你能够经由过程向数据源利用的参数汇合增加静态的Parameter工具来改动SqlDataSource附加到命令上的参数序次。SqlDataSource会依据这些参数工具的序次来从头分列数据绑定控件所传送的参数。当数据源的ProviderName属性被设置为System.Data.OleDb的时分,这类操纵就有效处了,这是因为它不撑持定名(named)参数,因而附加到命令上的参数的序次必需与命令中的匿名参数占位符(?)的序次相婚配。当我们利用定名参数的时分,参数的序次就是可有可无的。你能够指定Parameter工具的Type属性,确保在实行命令或办法之前,强迫数据绑定控件传送的值被转换为得当的数据范例。一样地,你还能够设置Parameter的Size属性,划定SqlDataSource命令中DbParameter的位数巨细(必需用于输出/输入、输入和前往值参数)。

<asp:SqlDataSourceConnectionString="<%$ConnectionStrings:NorthwindOLEDB%>"ID="SqlDataSource1"ProviderName="<%$ConnectionStrings:NorthwindOLEDB.ProviderName%>"runat="server"SelectCommand="SELECTTOP10[OrderID],[OrderDate],[ShipCountry]FROM[Orders]"UpdateCommand="UPDATE[Orders]SET[OrderDate]=?,[ShipCountry]=?WHERE[OrderID]=?"OnUpdating="SqlDataSource1_Updating">
<UpdateParameters>
 <asp:ParameterName="OrderDate"Type="DateTime"/>
 <asp:ParameterName="ShipCountry"Type="String"/>
 <asp:ParameterName="OrderID"Type="Int32"/>
</UpdateParameters>
</asp:SqlDataSource>
<P>  参数定名习气请求新值依据数据源Select操纵所选定的字段来定名。我们也能够经由过程指定OldValuesParameterFormatString属性(比方指定为"original_{0}")对Keys或OldValues中的参数举行重定名,以便于把它们和NewValues参数辨别开来。你还能够经由过程处置得当的事务,在数据源操纵实行之前改动参数的值,从而自界说参数称号。比方,假如SqlDataSource的更新操纵与一个存储历程联系关系,而该存储历程利用的参数称号与默许的定名习气分歧,那末你就能够在该存储历程被挪用之前,在SqlDataSource的Updating事务修正参数称号。上面的例子演示了这类手艺。

ProtectedSubSqlDataSource1_Updating(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
 e.Command.Parameters("@id").Value=e.Command.Parameters("@ContactID").Value
 e.Command.Parameters("@name").Value=e.Command.Parameters("@ContactName").Value
 e.Command.Parameters.Remove(e.Command.Parameters("@ContactID"))
 e.Command.Parameters.Remove(e.Command.Parameters("@ContactName"))
EndSub

<asp:SqlDataSourceConnectionString="<%$ConnectionStrings:Contacts%>"ID="SqlDataSource1"runat="server"SelectCommand="SELECT[ContactID],[ContactName]FROM[Contacts]"UpdateCommand="UpdateContactName"UpdateCommandType="StoredProcedure"OnUpdating="SqlDataSource1_Updating">
<UpdateParameters>
 <asp:ParameterName="id"Type="Int32"/>
 <asp:ParameterName="name"Type="String"/>
</UpdateParameters>
</asp:SqlDataSource>
  ObjectDataSource不依附特定的参数序次,而是复杂地查找与参数称号相婚配的办法。请注重,ObjectDataSource不利用参数的范例或巨细来剖析办法重载,它仅仅婚配参数称号,因而,假如你的营业工具中的两个办法具有不异的称号和参数称号,可是参数范例分歧,ObjectDataSource是没法把它们辨别开的。你能够在事务中改动ObjectDataSource参数的称号和值,这点与下面的SqlDataSource示例相似。可是,假如你利用DataObjectTypeName给Update、Insert和Delete操纵指定一个特别的数据工具范例,就不成以修正参数称号了--只能修正值。假如你必要修正参数称号,就不要利用DataObjectTypeName,只能用代码在数据源事务中手动地机关得当的数据工具。

  下面我们用到的一切数据源参数都是Input参数,用于把值传送到数据源操纵中。参数能够是双向的,比方InputOutput、Output和ReturnValue参数。你可使用参数工具的Direction属性来指定参数的偏向。假如必要在数据源操纵完成以后检索这些参数的值,就必要处置得当的操纵后(post-operation)事务(比方Selected、Updated、Inserted或Deleted事务),从传送到这些事务的事务参数中猎取参数值。SqlDataSourceStatusEventArgs具有Command属性,你可使用它来猎取前往值和输入参数,以下面的例子所示。请注重,关于双向参数来讲,把SqlDataSource中的Parameter工具的Size属性设置为得当的值长短常主要的。

<asp:SqlDataSourceID="SqlDataSource1"……>
<SelectParameters>
 <asp:ParameterDirection="Output"Name="TimeStamp"Type="DateTime"/>
 <asp:ParameterDirection="ReturnValue"Name="ReturnValue"Type="Int32"/>
</SelectParameters>
</asp:SqlDataSource>
  为了完成这个方针,ObjectDataSourceStatusEventArgs范例撑持OutputParameters汇合和ReturnValue属性,以下面一个例子所示。请注重,在这类情形下,Update操纵的前往值是用于检测操纵所影响的行数的。

ProtectedSubObjectDataSource1_Selected(ByValsenderAsObject,ByValeAsObjectDataSourceStatusEventArgs)
 Response.Write("RecordCount:"&Server.HtmlEncode(e.OutputParameters("totalCount")))
EndSub

ProtectedSubObjectDataSource1_Updated(ByValsenderAsObject,ByValeAsObjectDataSourceStatusEventArgs)
 Response.Write("RowsAffected:"&Server.HtmlEncode(e.ReturnValue)&"<br/>")
EndSub

<asp:ObjectDataSourceID="ObjectDataSource1"……>
 <UpdateParameters>
  <asp:ParameterName="ContactName"Type="String"/>
 </UpdateParameters>
 <SelectParameters>
  <asp:ParameterDirection="Output"Name="totalCount"Type="Int32"/>
 </SelectParameters>
</asp:ObjectDataSource>
  输入参数的另外一种一般的用处是检索拔出数据库的行的主键值,而该主键列是一个标识列(在这类情形下,在拔出操纵的参数中没有指定键值,该键值是在拔出操纵产生时,数据库服务器主动天生的)。上面的例子演示了这类手艺。

ProtectedSubSqlDataSource1_Inserted(ByValsenderAsObject,ByValeAsSystem.Web.UI.WebControls.SqlDataSourceStatusEventArgs)
 Response.Write("RecordInserted:"&Server.HtmlEncode(e.Command.Parameters("@ContactID").Value)&"<br/>")
EndSub

<asp:SqlDataSourceID="SqlDataSource1"……>
 ……
 <InsertParameters>
  <asp:ParameterName="contactName"Type="String"/>
  <asp:ParameterDirection="Output"Name="contactID"Type="Int32"/>
 </InsertParameters>
</asp:SqlDataSource>我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。
活着的死人 该用户已被删除
沙发
 楼主| 发表于 2015-1-18 09:17:33 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
再见西城 该用户已被删除
板凳
发表于 2015-1-21 15:17:44 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
透明 该用户已被删除
地板
发表于 2015-1-30 20:17:21 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
分手快乐 该用户已被删除
5#
发表于 2015-2-6 15:44:02 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
小妖女 该用户已被删除
6#
发表于 2015-2-16 22:36:36 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
admin 该用户已被删除
7#
发表于 2015-3-5 11:10:37 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
第二个灵魂 该用户已被删除
8#
发表于 2015-3-12 04:40:34 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
简单生活 该用户已被删除
9#
发表于 2015-3-19 18:03:40 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-24 01:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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