SqlDataSource学习笔记20091111:ConflictDetection属性

本文介绍了SqlDataSource控件在ASP.NET中的两种使用方式,并重点探讨了ConflictDetection属性的作用及其对并发控制的影响。当设置为CompareAllValues时,能有效检测并处理数据冲突。

从接触SqlDataSource开始,用得最多的也就这样的:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
<asp:SqlDataSource ID="classType" runat="server" ConnectionString="<%$ ConnectionStrings:NewsSysConn %>"
            DeleteCommand
="DELETE FROM [ClassType_tb] WHERE [Id] = @Id" InsertCommand="INSERT INTO [ClassType_tb] ([TypeName], [Description]) VALUES (@TypeName, @Description)"
            SelectCommand
="SELECT * FROM [ClassType_tb]" UpdateCommand="UPDATE [ClassType_tb] SET [TypeName] = @TypeName, [Description] = @Description WHERE [Id] = @Id">
            
<DeleteParameters>
                
<asp:Parameter Name="Id" Type="Int32" />
            
</DeleteParameters>
            
<UpdateParameters>
                
<asp:Parameter Name="TypeName" Type="String" />
                
<asp:Parameter Name="Description" Type="String" />
                
<asp:Parameter Name="Id" Type="Int32" />
            
</UpdateParameters>
            
<InsertParameters>
                
<asp:Parameter Name="TypeName" Type="String" />
                
<asp:Parameter Name="Description" Type="String" />
            
</InsertParameters>
        
</asp:SqlDataSource>

 

今天在一个项目中发现了这样的写法:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
        <asp:SqlDataSource ID="sdsClassType" runat="server" ConnectionString="<%$ ConnectionStrings:NewsSysConn %>"
            OldValuesParameterFormatString
="original_{0}" SelectCommand="SELECT * FROM [ClassType_tb]"
            ConflictDetection
="CompareAllValues" DeleteCommand="DELETE FROM [ClassType_tb] WHERE [Id] = @original_Id"
            InsertCommand
="INSERT INTO [ClassType_tb] ([TypeName], [Description]) VALUES (@TypeName, @Description)"
            UpdateCommand
="UPDATE [ClassType_tb] SET [TypeName] = @TypeName, [Description] = @Description WHERE [Id] = @original_Id AND [TypeName] = @original_TypeName AND [Description] = @original_Description">
            
<DeleteParameters>
                
<asp:Parameter Name="original_Id" Type="Int32" />
                
<asp:Parameter Name="original_TypeName" Type="String" />
                
<asp:Parameter Name="original_Description" Type="String" />
            
</DeleteParameters>
            
<UpdateParameters>
                
<asp:Parameter Name="TypeName" Type="String" />
                
<asp:Parameter Name="Description" Type="String" />
                
<asp:Parameter Name="original_Id" Type="Int32" />
                
<asp:Parameter Name="original_TypeName" Type="String" />
                
<asp:Parameter Name="original_Description" Type="String" />
            
</UpdateParameters>
            
<InsertParameters>
                
<asp:Parameter Name="TypeName" Type="String" />
                
<asp:Parameter Name="Description" Type="String" />
            
</InsertParameters>
        
</asp:SqlDataSource>

 

上网查了下,关于ConflictDetection属性的介绍如下:

 

ConflictDetectionConflictDetection

 

ConflictDetection 属性确定是将旧参数值还是将新参数值应用到 Update 方法。例如,如果 SelectCommand 属性指定的命令返回的 DataSet 对象包含列 NameNumber,且 ConflictDetection 属性设置为 OverwriteChanges 值,则为更新操作的 NameNumber 创建参数。如果 ConflictDetection 属性设置为 CompareAllValues 值,则为 NameNumberoriginal_Nameoriginal_Number 创建参数。(原始值的确切参数名取决于 OldValuesParameterFormatString。)然后,SqlDataSourceView 对象确定 UpdateCommand 属性中指定的方法是否具有匹配的参数。

并发控制是数据存储区使用的一种技术,可用于在多个客户端访问和操作相同数据时控制如何在存储区中读取和更改这些数据。例如,一个客户端读取数据并呈现给用户,而另一个客户端读取相同的数据并呈现给其他用户。如果这两个用户都更新数据并将其提交到数据存储区,则可能会出现某种意外的结果,因为两个客户端可能会更新相同数据的不同值。这种现象被视为冲突。通过将 ConflictDetection 属性设置为 CompareAllValues 值,更新操作然后可以比较原始数据的旧值和新值以检测冲突并根据需要处理它们。

ConflictDetection 属性的值存储在视图状态中。

 

 

这里需要注意的是,如果ConflictDetection属性值为CompareAllValues,与之绑定的数据控件每列的值必须全部显示,否则无法删除并报错;倘若设置为OverwriteChanges值,出现的情况是无法更新。

转载于:https://www.cnblogs.com/lybohe0807/archive/2009/11/11/1601122.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值