日期:2014-05-18  浏览次数:21130 次

一个事务处理的问题,帮忙解答一下,谢谢
public string UpdateOrderStatus(DataTable dt)
  {

  SqlConnection myconn = GetConn();


  SqlCommand Cmd = new SqlCommand();
  Cmd.Connection = myconn;
  Cmd.CommandText = "select rowid into #tmpdata from deliverydata where 2=1";
  Cmd.ExecuteNonQuery();
   

  SqlTransaction sqlbulkTransaction = myconn.BeginTransaction();
  SqlBulkCopy copy = new SqlBulkCopy(myconn, SqlBulkCopyOptions.CheckConstraints, sqlbulkTransaction);
  copy.DestinationTableName = "#tmpdata";
  foreach (DataColumn dc in dt.Columns) 
  { 
  copy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName); 
  } 
  try 
  {
  copy.WriteToServer(dt); 
  sqlbulkTransaction.Commit();

  Cmd.CommandText = "insert into tracedata(rowid,inserttime,status) (select rowid,'" + DateTime.Now.ToString() + "','出仓扫描' from #tmpdata)";
Cmd.ExecuteNonQuery();
   

  }
  catch (Exception ex) { 
  sqlbulkTransaction.Rollback(); 
  return(ex.ToString()); 
  }
  finally { 
  copy.Close();
  myconn.Close(); 
  }
  return "完成";
}


我要把事务处理跟上面红色这段代码关联,请问如何修改?因为上述的事务处理只应用于SqlBulkCopy,但是没有应用于Cmd.CommandText = "insert into tracedata。。。这段代码,请问应该如何修改?

------解决方案--------------------
Cmd.Transaction = sqlbulkTransaction;
Cmd.CommandText = "insert into tracedata(rowid,inserttime,status) (select rowid,'" + DateTime.Now.ToString() + "','出仓扫描' from #tmpdata)";
Cmd.ExecuteNonQuery();
------解决方案--------------------
在红色语句前加入
Cmd.Transaction = sqlbulkTransaction;

将sqlbulkTransaction.Commit();放到红色后面