2011-08-28 70 views
0

SqlTransaction是否执行批处理操作而不重复访问数据库?我不知道,因为SqlTransaction似乎将一堆SQL命令组合在一起并最终提交到数据库。但是,每个命令都会运行ExecuteNonQuery(),这会导致数据库访问。使用ADO.NET批量操作

public List<Task> SubmitSheet(List<Task> tList) 
{ 
    SqlConnection conn = A2.Controller.Utils.conn; 
    SqlTransaction submitTransaction = null; 
    try 
    { 
     conn.Open(); 
     submitTransaction = conn.BeginTransaction(); 
     foreach (Task t in tList) { 
      SqlCommand submitCmd = new SqlCommand("SubmitTask", conn); 
      submitCmd.CommandType = CommandType.StoredProcedure; 
      submitCmd.Transaction = submitTransaction; 
      submitCmd.Parameters.Add("@tid", SqlDbType.Int).Value = t.Id; 
      submitCmd.ExecuteNonQuery(); 
     } 
     submitTransaction.Commit(); 
    }   
    finally { 
     if (conn.State == ConnectionState.Open) conn.Close(); 
    } 
    return tList; 
} 
+4

不,它只是测试你最喜欢的Sql-Profiler。顺便说一句:这与asp.net没有任何关系 – Carsten

+0

如果您使用的是SQL Server 2008,则可以使用表值参数将该批ID完全提交给存储过程。 –

+0

@Coenoen你的意思是,它会访问每个命令的数据库? – Amumu

回答