целостность данных в SQL Server, используя посредника между пользователями и фактическими таблицами SQL Server - PullRequest
1 голос
/ 07 марта 2011

Есть ли какая-нибудь посредническая вещь, которая действует в качестве слоя между пользователями и реальной таблицей на сервере sql?

Как я хочу, чтобы, когда пользователь вставлял данные из моего приложения WinNet .net, то сначала он вставлялся в посредник, а затем переходил к фактической таблице и вставлялся.

Я хочу этого, потому что в случае сбоя питания, как только пользователь вставит данные, тогда мои фактические таблицы будут в безопасности, будет задействован только посредник, а в посреднике я буду использовать TRANSACTIONS для отката и фиксации.

как я бы использовал это: если медиатор полностью обновляется новыми данными, то фиксирует его, а затем вставляет в фактическую таблицу, в противном случае, откат самого медиатора не касается исходной таблицы.

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Вам следует обратиться к поддержке транзакций в C # - гораздо лучший выбор, чем добавить еще один слой (посредник) в вашу систему.

Узнайте все об этом в MSDN - Транзакции и параллелизм в ADO.NET

По сути, для вашего SqlConnection объекта у вас есть метод .BeginTransaction - используйте его для переноса любых вызовов вашей базы данных в транзакции:

using(SqlConnection _con = new SqlConnection("your-conn-string-here"))
using(SqlCommand _cmd = new SqlCommand(queryStmt, _con))
{
    SqlTransaction sqlTran = _con.BeginTransaction();
    _cmd.Transaction = sqlTran;

    try
    {
       _con.Open();
       // do something, e.g. call _cmd.ExecuteNonQuery, or read a data reader

       sqlTran.Commit();
    }
    catch(Exception exc)
    {
        // log error
        sqlTran.Rollback();
    } 

    _con.Close();
}
1 голос
/ 07 марта 2011

СДЕЛКИ SQL могут точно решить вашу проблему без посредников. Транзакция гарантирует, что действие подставленных операторов является атомарным по отношению к восстановлению. Транзакции не затрагивают фактические данные, пока не будет выполнен COMMIT. В случае возникновения проблемы; Оператор ROLLBACK завершает текущую транзакцию и отменяет все изменения, сделанные в транзакции.

Кроме того, вы можете установить правильную изоляцию для транзакции. Изоляция транзакций контролирует видимость изменений между транзакциями в разных сеансах. Он определяет, могут ли запросы в одном сеансе видеть изменения, сделанные транзакцией в другом сеансе.

Пожалуйста, прочитайте msdn ссылку для транзакции для получения дополнительных разъяснений.

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