|
自译MSDN文献 《摆脱开发者对 CommandBuilder的依赖》(32) UpdateCommand 提出了一点新的挑战. 在这个例子中我们通过原始TimeStamp (托管于 ADO.net DataRowVersion.Original名称空间) 同服务器端TimeStamp列的新版本测试并发. 如果测试不匹配, 我们就能知道该行已经在你获取之后又发生了更改. 和InsertCommand一样, UpdateCommand 导入了 第二个 SELECT 命令来返回当前行的数据. 坦白的讲, 这非常的无聊, 他必定与我们刚刚所做的操作结果匹配. 在 (非常特殊) 的情况下你没有写入所有列, 这样做可能有用, 但这样做无疑浪费时间. 我从 DACW生成代码中消去几个额外参数获得下面清单 8的结果. 清单 8. DataAdapter UpdateCommand 调整 ' 'SqlUpdateCommand1 ' ' 创建 DA UpdateCommand实例 da.UpdateCommand = New SqlCommand(Nothing, cn) With da.UpdateCommand .CommandText = "UPDATE DemoTSConcurrency SET Name = " _ & "@Name, State = @State " _ & " WHERE (PID = @PID) AND (TimeStamp = @Original_TimeStamp); " _ .Parameters.Add(New System.Data.SqlClient.SqlParameter("@PID", _ System.Data.SqlDbType.Int, 4, "PID")) .Parameters.Add(New System.Data.SqlClient.SqlParameter("@Name", _ System.Data.SqlDbType.VarChar, 50, "Name")) .Parameters.Add(New System.Data.SqlClient.SqlParameter("@State", _ System.Data.SqlDbType.Char, 2, "State")) .Parameters.Add(New System.Data.SqlClient.SqlParameter( _ "@Original_TimeStamp", _ System.Data.SqlDbType.VarBinary, 8, _ System.Data.ParameterDirection.Input, _ False, CType(0, Byte), CType(0, Byte), "TimeStamp", _ System.Data.DataRowVersion.Original, Nothing)) End With 调整 DeleteCommand
|