ASP.NET 2.0高级数据处理之使用参数

你可以处理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 />")
  Next
End Sub
Protected Sub EnumerateCommandParameters(ByVal command 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 command.Parameters
Response.Write(" <b>" & Server.HtmlEncode (param.ParameterName) & "</b>=" & Server.HtmlEncode (param.Value) & " (" & Server.HtmlEncode(param.Value.GetType ().Name) & ")<br />")
  Next
End Sub
Protected Sub DetailsView1_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 Sub
Protected Sub SqlDataSource1_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="SqlDataSource1" ProviderName="<%$ ConnectionStrings:NorthwindOLEDB.ProviderName % >" runat="server" SelectCommand="SELECT TOP 10 [OrderID], [OrderDate], [ShipCountry] FROM [Orders]" UpdateCommand="UPDATE [Orders] SET [OrderDate] = ?, [ShipCountry] = ? WHERE [OrderID] = ?" OnUpdating="SqlDataSource1_Updating">
<UpdateParameters>
  <asp:Parameter Name="OrderDate" Type="DateTime" />
  <asp:Parameter Name="ShipCountry" Type="String" />
  <asp:Parameter Name="OrderID" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>

时间: 2024-10-03 14:19:57

ASP.NET 2.0高级数据处理之使用参数的相关文章

ASP.NET 2.0高级数据处理之数据绑定

asp.net|高级|数据 在前面的"模板中的数据绑定"部分中我们论述过,ASP.NET包含了一种宣告式的数据绑定语法,用于在数据绑定模板中把数据源字段与控件的属性相关联.你也可以在代码中使用<%# ... >语法来进行任意值的数据绑定,例如页面和控件属性.集合.表达式,甚至于方法调用的返回结果.为了强制计算数据绑定的值,你必须在包含数据绑定语法的页面或控件上调用DataBind方法.下面的表格显示了ASP.NET中的数据绑定语法的一些例子. 单个属性 Customer:

ASP.NET 2.0高级数据处理之数据绑定语法

asp.net|高级|数据|语法 在前面的"模板中的数据绑定"部分中我们论述过,ASP.NET包含了一种宣告式的数据绑定语法,用于在数据绑定模板中把数据源字段与控件的属性相关联.你也可以在代码中使用<%# ... >语法来进行任意值的数据绑定,例如页面和控件属性.集合.表达式,甚至于方法调用的返回结果.为了强制计算数据绑定的值,你必须在包含数据绑定语法的页面或控件上调用DataBind方法.下面的表格显示了ASP.NET中的数据绑定语法的一些例子. 单个属性 Custome

ASP.NET 2.0高级数据处理之主从数据表

asp.net|高级|数据 在前面的文章中,我们已经知道如何将ControlParameter(控件参数)与GridView的SelectedValue属性相关联以实现主-从数据表.SelectedValue属性返回DataKeyNames属性所指定的第一个字段的值.你也可以给DataKeyNames属性指定多个用逗号分隔的字段值,例如,你可能需要把多个值传递到从表的数据源.这些额外的键字段值是通过SelectedDataKey属性暴露的,它返回一个DataKey对象,包含键字段的名称/值对(p

ASP.NET 2.0高级数据处理之冲突检测

asp.net|高级|数据 前面我们提到,数据绑定控件把传递给数据源的值存放在相互独立的Keys.Values(新值)和 OldValues字典中.在默认情况下,SqlDataSource和ObjectDataSource会忽略OldValues字段,只使用Keys和Values.这种行为是由数据源的ConflictDetection属性检测的,在默认情况下这个属性的值被设置为OverwriteChanges.OverwriteChanges模式意味着"为了更新或删除记录,仅仅匹配主键值&quo

ASP.NET 2.0高级数据处理之处理Null值

asp.net|高级|数据 数据控件支持多种用于处理空值或缺失数据的方法.例如,GridView.FormView和DetailsView都支持EmptyDataText或EmptyDataTemplate属性,当数据源没有返回数据行的时候,你可以使用这些属性来指定控件显示的内容.我们只需要设置EmptyDataText和EmptyDataTemplate其中的一个(如果两个都设置了,EmptyDataTemplate会被重载).你也可以在绑定字段(和衍生的字段类型).模板字段或数据源参数对象上

ASP.NET 2.0高级数据处理之处理控件事件

在前面的部分中,你已经看到了几个数据控件事件的例子.数据控件的事件 都是在页面执行生命周期的适当时候提供给你,供你插入自定义代码的.一般情 况下,在某种特定的操作发生之前和之后,数据控件都会暴露事件.在某种操作 之前调用的事件的名称一般带有-ing后缀,而在某种操作之后调用的事件的名称 一般带有-ed后缀.例如,GridView所支持的事件包括: · PageIndexChanging和PageIndexChanged - 在分页操作之前和之后引发 · SelectedIndexChanging

ASP.NET2.0高级数据处理之数据绑定

本文详细介绍了ASP.NET 2.0高级数据处理中的数据绑定,包括有绑定语法,指定运行时所期望的数据类型:如何绑定到公共变量和页面的简单属性:如何绑定到另一个控件的属性:如何绑定到通用语言运行时集合类型:如何绑定到ArrayList:如何绑定到DataView等. 在前面的"模板中的数据绑定"部分中我们论述过,ASP.NET包含了一种宣告式的数据绑定语法,用于在数据绑定模板中把数据源字段与控件的属性相关联.你也可以在代码中使用<%# ... >语法来进行任意值的数据绑定,例

Scott Mitchell的ASP.NET 2.0数据教程之五:声明参数

返回"ASP.NET 2.0数据教程目录" 导言 在上一章的教程中,我们看了GridView.DetailsView和FormView 绑定到OjbectDataSource控件显示数据,ObjectDataSource调用了类ProductsBLL 的GetProducts()方法.方法GetProducts()返回一个有Northwind数据库的 Products表的所有记录组成的强类型数据表.类ProductsBLL还包含了其它返回部 分数据的方法:GetProductByPro

求ASP.NET 2.0高级编程(第4版) 英文

问题描述 如题求这书,最好是完整的如果没有完整的,要第一章也可以.谢谢 解决方案 解决方案二:第一章的http://www.shubulo.com/thread-35493-1-2.html