Объекты соединения, транзакции и команды - это просто средства для отправки команд в базу данных.После выполнения команды база данных получила ее.Что бы вы ни делали с командным объектом впоследствии, утилизируете его, сжигаете или стреляете в него на Луну, этот факт не меняется.(Откат возможен только).
Вы можете создавать и располагать столько команд, сколько захотите, в пределах одной SqlConnection
(с SqlTransaction
или без него).И вы можете запускать и распоряжаться любым количеством транзакций в пределах одной SqlConnection
.Чтобы продемонстрировать это, см .:
using (var conn = new SqlConnection(@"server=(local)\sql2008;database=Junk;Integrated Security=SSPI"))
{
conn.Open();
// Repeat this block as often as you like...
using (var tran = conn.BeginTransaction())
{
using (var cmd = new SqlCommand("INSERT INTO Mess VALUES ('mess1')", conn, tran))
{
cmd.ExecuteNonQuery(); // Shows in Sql profiler
}
tran.Commit(); // Commits
}
using (var cmd = new SqlCommand("INSERT INTO Mess VALUES ('mess2')", conn))
{
cmd.ExecuteNonQuery(); // Executes and commits (implicit transaction).
}
}
Конечно, для работоспособного кода вам необходимо располагать все объекты в правильном порядке.Удаление команды после удаления SqlConnection
может привести к тому, что объект подключения останется в памяти.