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语句一次执行呢?
{
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语句一次执行呢?
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);
这样应该可以。
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); 这样就可以了
如果這兩個update是關聯的,最好要使用sql的transaction來保證更新都成功,否則就不執行.
然后BatchExcute,不知道C#有没有
if @_tempNodeID <>""
begin
update TableName set NodeID =-1 where NodeID =@_tempNodeID
end
if @_NodeID <>""
begin
update TableName set NodeID =@_tempNodeID where NodeID=@_NodeID end
类推···
举例:
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都能直接执行。谢谢楼上的指点。
执行SQL操作;
如果没有错误;
SQLCommand.Transaction.Commit();
如果执行有错误;
SQLCommand.Transaction.RollBack();