有关生成(ADO.NET)DataAdapter(UpdateCommand)中的SQL的问题

时间:2011-04-21 01:11:55

标签: c# ado.net dataset

以下内容来自生成的数据适配器:

this._adapter.UpdateCommand.CommandText = @"
    UPDATE [dbo].[Currency2] SET [cid1] = @cid1, [cid2] = @cid2, [m] = @m 
    WHERE (([id] = @Original_id) 
    AND ([cid1] = @Original_cid1) 
    AND ([cid2] = @Original_cid2) 
    AND ([m] = @Original_m));

    SELECT id, cid1, cid2, m 
    FROM Currency2 
    WHERE (cid1 = @cid1) AND (cid2 = @cid2) AND (id = @id)";
  1. where子句是否按照其正式定义实现乐观并发?

  2. 我最好的猜测是SELECT的目的是返回更新行的数量,但为什么不使用COUNT(*)?

  3. 更新:这是生成的UPDATE代码,它给了我关于(2)中SELECT的想法。

    public virtual int Update(int cid1, int cid2, decimal m, int Original_id, int Original_cid1, int Original_cid2, decimal Original_m, int id) {
        this.Adapter.UpdateCommand.Parameters[0].Value = ((int)(cid1));
        this.Adapter.UpdateCommand.Parameters[1].Value = ((int)(cid2));
        this.Adapter.UpdateCommand.Parameters[2].Value = ((decimal)(m));
        this.Adapter.UpdateCommand.Parameters[3].Value = ((int)(Original_id));
        this.Adapter.UpdateCommand.Parameters[4].Value = ((int)(Original_cid1));
        this.Adapter.UpdateCommand.Parameters[5].Value = ((int)(Original_cid2));
        this.Adapter.UpdateCommand.Parameters[6].Value = ((decimal)(Original_m));
        this.Adapter.UpdateCommand.Parameters[7].Value = ((int)(id));
        global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
        if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
            != global::System.Data.ConnectionState.Open)) {
        this.Adapter.UpdateCommand.Connection.Open();
        }
        try {
        int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
        return returnValue;
        }
        finally {
        if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
            this.Adapter.UpdateCommand.Connection.Close();
        }
        }
    }
    

2 个答案:

答案 0 :(得分:2)

该查询的作用是,将更新的记录返回给应用程序以供将来使用,以便在内存中更新对象,而不是更新前的状态。它在一次往返中基本上是UPDATE xxx WHERE ID=@IDSELECT xxx FROM xxx WHERE ID=@ID命令。

答案 1 :(得分:1)

  

是否实施了where子句   正式的乐观并发   定义

排序。它会检查每一列,看看是否有人更改过任何一列。如果记录已更改,则不会更新。

但是,一个定义(来自维基百科)表示,如果记录发生变化,事务将被回滚。这不会发生在这里。