知识大全 ASP.NET 2.0高级数据处理之使用参数

Posted

篇首语:人生难得几回搏,此时不搏待何时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET 2.0高级数据处理之使用参数相关的知识,希望对你有一定的参考价值。

ASP.NET 2.0高级数据处理之使用参数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

你可以处理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的 <script runat= server >Protected Sub EnumerateDictionary(ByVal dictionary As System Collections Specialized IOrderedDictionary) Dim entry As DictionaryEntry For Each entry In dictionary  Response Write( <b> & Server HtmlEncode(entry Key) & </b>= & Server HtmlEncode(entry Value) & ( & Server HtmlEncode(entry Value GetType() Name) & )<br /> ) NextEnd SubProtected Sub EnumerateCommandParameters(ByVal mand As System Data Common DbCommand) Response Write( <br/>Parameter order in data source <br /> ) Dim param As System Data Common DbParameter For Each param In mand Parameters  Response Write( <b> & Server HtmlEncode(param ParameterName) & </b>= & Server HtmlEncode(param Value) & ( & Server HtmlEncode(param Value GetType() Name) & )<br /> ) NextEnd SubProtected Sub DetailsView _ItemUpdating(ByVal sender As Object ByVal e As System Web UI WebControls DetailsViewUpdateEventArgs) Response Write( <br/>New Values passed from DetailsView <br /> ) EnumerateDictionary(e NewValues)  Response Write( <br/>Keys passed from DetailsView <br /> ) EnumerateDictionary(e Keys)  Response Write( <br/>Old Values passed from DetailsView <br /> ) EnumerateDictionary(e OldValues)End SubProtected Sub SqlDataSource _Updating(ByVal sender As Object ByVal e As System Web UI WebControls SqlDataSourceCommandEventArgs) EnumerateCommandParameters(e Command) e Cancel = True Response Write( <br/>Update canceled )End Sub  你可以通过向数据源使用的参数集合添加静态的Parameter对象来改变SqlDataSource附加到命令上的参数次序 SqlDataSource会根据这些参数对象的次序来重新排列数据绑定控件所传递的参数 当数据源的ProviderName属性被设置为System Data OleDb的时候 这种操作就有用处了 这是由于它不支持命名(named)参数 因此附加到命令上的参数的次序必须与命令中的匿名参数占位符( ? )的次序相匹配 当我们使用命名参数的时候 参数的次序就是无关紧要的 你可以指定Parameter对象的Type属性 确保在执行命令或方法之前 强制数据绑定控件传递的值被转换为适当的数据类型 同样地 你还可以设置Parameter的Size属性 规定SqlDataSource命令中DbParameter的位数大小(必须用于输入/输出 输出和返回值参数) <asp:SqlDataSource ConnectionString= <%$ ConnectionStrings:NorthwindOLEDB %> ID= SqlDataSource ProviderName= <%$ ConnectionStrings:NorthwindOLEDB ProviderName %> runat= server SelectCommand= SELECT TOP [OrderID] [OrderDate] [ShipCountry] FROM [Orders] UpdateCommand= UPDATE [Orders] SET [OrderDate] = ? [ShipCountry] = ? WHERE [OrderID] = ? OnUpdating= SqlDataSource _Updating ><UpdateParameters> <asp:Parameter Name= OrderDate Type= DateTime /> <asp:Parameter Name= ShipCountry Type= String /> <asp:Parameter Name= OrderID Type= Int /></UpdateParameters></asp:SqlDataSource>  参数命名习惯要求新值根据数据源Select操作所选定的字段来命名 我们也可以通过指定OldValuesParameterFormatString属性(例如指定为 original_ )对Keys或OldValues中的参数进行重命名 以便于把它们和NewValues参数区分开来 你还可以通过处理适当的事件 在数据源操作执行之前改变参数的值 从而自定义参数名称 例如 如果SqlDataSource的更新操作与一个存储过程关联 而该存储过程使用的参数名称与默认的命名习惯不同 那么你就可以在该存储过程被调用之前 在SqlDataSource的Updating事件修改参数名称 下面的例子演示了这种技术 Protected Sub SqlDataSource _Updating(ByVal sender As Object ByVal e As System 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 ))End Sub<asp:SqlDataSource ConnectionString= <%$ ConnectionStrings:Contacts %> ID= SqlDataSource runat= server SelectCommand= SELECT [ContactID] [ContactName] FROM [Contacts] UpdateCommand= UpdateContactName UpdateCommandType= StoredProcedure OnUpdating= SqlDataSource _Updating ><UpdateParameters> <asp:Parameter Name= id Type= Int /> <asp:Parameter Name= 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:SqlDataSource ID= SqlDataSource ……><SelectParameters> <asp:Parameter Direction= Output Name= TimeStamp Type= DateTime /> <asp:Parameter Direction= ReturnValue Name= ReturnValue Type= Int /></SelectParameters></asp:SqlDataSource>  为了实现这个目标 ObjectDataSourceStatusEventArgs类型支持OutputParameters集合和ReturnValue属性 如下面一个例子所示 请注意 在这种情况下 Update操作的返回值是用于检测操作所影响的行数的 Protected Sub ObjectDataSource _Selected(ByVal sender As Object ByVal e As ObjectDataSourceStatusEventArgs) Response Write( Record Count: & Server HtmlEncode(e OutputParameters( totalCount )))End SubProtected Sub ObjectDataSource _Updated(ByVal sender As Object ByVal e As ObjectDataSourceStatusEventArgs) Response Write( Rows Affected: & Server HtmlEncode(e ReturnValue) & <br/> )End Sub<asp:ObjectDataSource ID= ObjectDataSource ……> <UpdateParameters>  <asp:Parameter Name= ContactName Type= String /> </UpdateParameters> <SelectParameters>  <asp:Parameter Direction= Output Name= totalCount Type= Int /> </SelectParameters></asp:ObjectDataSource>  输出参数的另一种通常的用途是检索插入数据库的行的主键值 而该主键列是一个标识列(在这种情况下 在插入操作的参数中没有指定键值 该键值是在插入操作发生时 数据库服务器自动生成的) 下面的例子演示了这种技术 Protected Sub SqlDataSource _Inserted(ByVal sender As Object ByVal e As System Web UI WebControls SqlDataSourceStatusEventArgs) Response Write( Record Inserted: & Server HtmlEncode(e Command Parameters( @ContactID ) Value) & <br/> )End Sub<asp:SqlDataSource ID= SqlDataSource ……> …… <InsertParameters>  <asp:Parameter Name= contactName Type= String />  <asp:Parameter Direction= Output Name= contactID Type= Int /> </InsertParameters></asp:SqlDataSource> cha138/Article/program/ASP/201311/21867

相关参考

知识大全 ASP.NET 2.0高级数据处理之冲突检测

ASP.NET2.0高级数据处理之冲突检测  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!前面我们提

知识大全 ASP.NET 2.0高级数据处理之处理控件事件

ASP.NET2.0高级数据处理之处理控件事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在前面

知识大全 ASP.NET 2.0高级数据处理之主从数据表

ASP.NET2.0高级数据处理之主从数据表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在前面的

知识大全 ASP.NET 2.0高级控件之FileUpload控件

ASP.NET2.0高级控件之FileUpload控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 C#+ASP.NET 2.0 定制复合组件之高级篇

C#+ASP.NET2.0定制复合组件之高级篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一

知识大全 ASP.NET 2.0移动开发之列表控件

ASP.NET2.0移动开发之列表控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!概述  在很多

知识大全 ASP.NET 2.0服务器控件之验证控件示例

ASP.NET2.0服务器控件之验证控件示例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在上

知识大全 ASP.NET 2.0移动开发之属性重写和模板化

ASP.NET2.0移动开发之属性重写和模板化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本

知识大全 C#+ASP.NET 2.0 定制复合组件之基础篇

C#+ASP.NET2.0定制复合组件之基础篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘

知识大全 探讨ASP.NET 2.0的Web控件改进之概述

探讨ASP.NET2.0的Web控件改进之概述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一引言