小量資料正常,大量資料/長時間處理時拋出:
「SqlTransaction 已經用完;它再也不能使用。」
SqlCommand.CommandTimeout 預設 30 秒(非連線逾時 ConnectionTimeout 15 秒)SqlTransaction trans = conn.BeginTransaction();
try {
CEngine.ExecuteNonQuery(trans, CommandType.Text, sql); // 無設定 Timeout
trans.Commit();
} ...
SqlTransaction trans = conn.BeginTransaction();
try {
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 300; // 延長至 5 分鐘
cmd.CommandText = sql;
cmd.Connection = conn;
cmd.Transaction = trans;
cmd.ExecuteNonQuery();
trans.Commit();
} catch (SqlException ex) {
trans.Rollback();
// 錯誤處理
} finally {
trans.Dispose();
conn.Close();
}
測試大量資料場景,問題徹底解決。
ConnectionTimeout:建立連線等待上限(預設 15 秒)CommandTimeout:命令執行等待上限(預設 30 秒)