Есть ли разница между вызовом BeginTransaction из объекта SQLConnection или из объекта SqlCommand? - PullRequest
2 голосов
/ 18 февраля 2012

Итак, у меня есть этот sql из c # для вставки информации о покупке в таблицу (sql server 2005) и покупки предметов (несколько) в другую таблицу.

Я бы хотел, чтобы 2 оператора вставки выполнялись в транзакции путем вызова BeginTransaction.

Я заметил, что могу сделать это либо из объекта SqlConnection, либо из объекта SqlCommand. Мои внутренности говорят мне, что я должен сделать это через объект подключения, так как я буду использовать 1 объект команды для каждой вставки, но они оба используют одно и то же соединение.

Я прав?

В общем, есть ли разница между ними?

1 Ответ

3 голосов
/ 18 февраля 2012

Создайте SqlTransaction из соединения (BeginTransaction), а затем передайте его каждому объекту SqlCommand. Есть конструктор, который принимает SqlTransaction в качестве параметра или просто устанавливает свойство SqlCommand.Transaction.

Что-то вроде: (извините, форматирование сложно на iPad)

var tran = db.BeginTransaction();
try {

  SqlCommand com = new SqlCommand(...., tran);
  // or.  
  com.Transaction=tran;

  // do the work, eg execute SQL 

  // finally commit the changes
  tran.Commit();
}
catch
{
  tran.Rollback();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...