<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的位数大小(必须用于输入/输出、输出和返回值参数)。