public void treeView_UpdateNodeMove(...,string TableName, string NodeID, string ParentID)
        {
            SqlConn sqlconn = new SqlConn();
            string strSql = "update " + TableName + " set " + NodeID + "=-1 where " + NodeID + "=" + _tempNodeID + "";
            sqlconn.ExecuteSQL(strSql);
            strSql = "update " + TableName + " set " + NodeID + "=" + _tempNodeID + " where " + NodeID + "=" + TargetNode.Name + "";
            sqlconn.ExecuteSQL(strSql);            ......//            strSql = "update " + TableName + " set " + ParentID + "=" + TargetNode.Name + " where " + ParentID + "=-1";
            sqlconn.ExecuteSQL(strSql);
        ......
                    
        }以上是一个连续执行update 语句的例子,请问,能不能将上面的语句合并成一个sql语句一次执行呢?

解决方案 »

  1.   

     SqlConn sqlconn = new SqlConn(); 
                string strSql = "update " + TableName + " set " + NodeID + "=-1 where " + NodeID + "=" + _tempNodeID + ""; 
                           strSql += " update " + TableName + " set " + NodeID + "=" + _tempNodeID + " where " + NodeID + "=" + TargetNode.Name + ""; 
                            ......//             strSql += "  update " + TableName + " set " + ParentID + "=" + TargetNode.Name + " where " + ParentID + "=-1"; 
                sqlconn.ExecuteSQL(strSql); 
    这样应该可以。
      

  2.   

    楼上少加了分号   每句之间要加";"  否则sql执行会报错地
      

  3.   

    SqlConn sqlconn = new SqlConn(); 
                string strSql = "update " + TableName + " set " + NodeID + "=-1 where " + NodeID + "=" + _tempNodeID + ";"
                          strSql += " update " + TableName + " set " + NodeID + "=" + _tempNodeID + " where " + NodeID + "=" + TargetNode.Name + ";"
                            
                strSql += "  update " + TableName + " set " + ParentID + "=" + TargetNode.Name + " where " + ParentID + "=-1"; 
                sqlconn.ExecuteSQL(strSql); 这样就可以了
      

  4.   

    1楼3楼的,楼主应该不是这个意思吧。这样做在数据库里还是执行多条sql语句,而且你们这样改了后代码显的不够清晰,有点乱。建议楼主改一下方法,根据不同条件,没有必要把这三个不同的条件放在一个方法里全做了。o(∩_∩)o...
      

  5.   

    請樓主清楚一下意思?
    如果這兩個update是關聯的,最好要使用sql的transaction來保證更新都成功,否則就不執行.
      

  6.   

    原来用java的时候,把sql放在list中
    然后BatchExcute,不知道C#有没有
      

  7.   

    存储过程
    if @_tempNodeID <>""
    begin
     update TableName  set  NodeID =-1 where NodeID =@_tempNodeID 
    end
    if @_NodeID  <>""
    begin
     update TableName  set  NodeID =@_tempNodeID  where NodeID=@_NodeID   end
    类推···
      

  8.   

    Sql 支持多条语句同时执行的 
      

  9.   

    谢谢 大家的分析,其实这些语句主要是为了完成数据表中两个值进行互换的,
    举例:
    NodeID NodeName ParentID
    2      aa       1
    3      bb       2
    ...将NodeID 中的内容2、3互换,并且保持ParentID中的对应关系
    完成后应为:
    NodeID NodeName ParentID
    3      aa       1
    2      bb       3
    ...更新代码如下:
    "update " + TableName + " set " + NodeID + "=-1 where " + NodeID + "=" + _tempNodeID + ";";
    "update " + TableName + " set " + NodeID + "=" + _tempNodeID + " where " + NodeID + "=" + TargetNode.Name + "";
    "update " + TableName + " set " + NodeID + "=" + TargetNode.Name + " where " + NodeID + "=-1";
    "update " + TableName + " set " + ParentID + "=-1 where " + ParentID + "=" + _tempNodeID + "";
    "update " + TableName + " set " + ParentID + "=" + _tempNodeID + " where " + ParentID + "=" + TargetNode.Name + "";
    "update " + TableName + " set " + ParentID + "=" + TargetNode.Name + " where " + ParentID + "=-1";想通过一个中间值,实现互换和保持对应关系,不知道这种想法是不是太复杂了呢?如果谁有更好的方法,请指点一下吧。哦,使用 strSql += 的方法可行的,每条语句后面加个“;”或者使用“ ”格开,SQL server都能直接执行。谢谢楼上的指点。
      

  10.   

    SQLCommand.Transaction = SQLConnection.BeginTransaction();
    执行SQL操作;
    如果没有错误;
    SQLCommand.Transaction.Commit();
    如果执行有错误;
    SQLCommand.Transaction.RollBack();