asp.net2.0揭秘读书笔记四:GridView控件更新数据处理并发问题

 

GridView可以同时保存每个数据列的原始值和修改后的新值,所以能够处理并发冲突。

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head id="Head1" runat="server">

    <title>Concurrency</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:GridView

        id="grdMovies"

        DataSourceID="srcMovies"

        DataKeyNames="Id"

        AutoGenerateEditButton="true"

        Runat="server" />

    <asp:SqlDataSource

        id="srcMovies"

        ConflictDetection="CompareAllValues"

        OldValuesParameterFormatString="original_{0}"

        ConnectionString="<%$ ConnectionStrings:Movies %>"

        SelectCommand="SELECT Id,Title,Director FROM Movies"

        UpdateCommand="UPDATE Movies SET Title=@Title, Director=@Director

            WHERE Id=@original_Id AND Title=@original_Title AND Director=@original_Director"

        Runat="server" />

    </div>

    </form>

</body>

</html>

 

在上面的代码清单中,SqlDataSource控件的ConflicatDetection属性和OldValuesParameterFormatString属性都被赋值,这两个属性会使SqlDataSource控件为每一个数据列保持此列的原始值和修改后的值。

ConflicatDetection属性可以为以下两个值之一:

CompareAllValues

OverwriteChanges

ConflicatDetection的默认值是OverwriteChanges,这个会导致SqlDataSource控件直接使用新值覆盖到数据列中。如果设为CompareAllValuesSqlDataSource控件会为每一列保持原始值和修改后的值。

OldValuesParameterFormatString属性用来为列的原始值提供唯一的名称,例如,SqlDataSource控件的UpdateCommand属性值如下所示:

   UpdateCommand="UPDATE Movies SET Title=@Title, Director=@Director

            WHERE Id=@original_Id AND Title=@original_Title AND Director=@original_Director"

 

@original_Id,@original_Title,@original_Director参数表示这些列的原始值,如果谁先修改了这些记录,这本次修改则被忽略。

你可能感兴趣的:(GridView)