Многократная вставка в SQL Server 2008 через Ado.Net 3.5 и C # - PullRequest
2 голосов
/ 26 ноября 2011

У меня есть коллекция данных.Мне нужно вставить эти записи в SQL Server 2008. Мне также нужно поддерживать транзакцию, чтобы в случае сбоя одной вставки мне пришлось откатывать все сделанные изменения.

Может кто-нибудь предложить лучший способ сделать это?Я использую .Net 3.5.

Ответы [ 3 ]

4 голосов
/ 26 ноября 2011

Вам необходимо создать транзакцию, используя метод SqlConnection объекта BeginTransaction .Это вернет объект SqlTransaction, который необходимо отслеживать.

Когда все ваши элементы будут успешно вставлены в базу данных, вы вызовете Commit для объекта транзакции.

Если во время обработки возникнет исключение, вам необходимо вызвать Rollback для объекта транзакции.

Грубо говоря, код:

SqlConnection conn;
// Create and open your connection here

SqlTransaction trans = conn.BeginTransaction();
try {
   // Perform your inserts

   trans.Commit();
} catch(Exception ex) {
   trans.Rollback();

   // Report the exception
}
1 голос
/ 26 ноября 2011

В зависимости от того, используете ли вы ADO.NET/plain SQL, вы можете использовать bulk insert или, если вы используете Linq-to-SQL, вы можете попробовать LINQ Entity Data Reader для одновременной вставки большого количества данных.

При использовании массовой вставки каждая партия копируется на сервер как одна транзакция. Если это не удается, SQL Server фиксирует или откатывает транзакцию для каждого пакета.

1 голос
/ 26 ноября 2011

Читать все о TransactionScope и System.Transactions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...