Внесение изменений в базу данных - PullRequest
0 голосов
/ 01 июля 2010

Я использую строго типизированный набор данных в своем приложении C #, и я хотел бы иметь возможность регистрировать любые изменения, сделанные пользователем, в строке.Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 02 июля 2010

Хотите ли вы получить доступ к изменениям из вашего приложения C #?Или это только для целей регистрации / аудита?Является ли ваш строго типизированный набор данных набором данных XSD, который сопоставляется с таблицей SQL Server?

Триггеры на сервере SQL

В большой системе заказов, которую я помог разработать в CB RichardЭллис, мы создали дополнительные таблицы для хранения версионных данных.Скажем, у вас есть таблица запросов.Создайте таблицу Request_changes.Затем вы настраиваете триггеры для INSERT и UPDATE следующим образом:

CREATE TRIGGER [dbo].[tr_Request_update]
ON [dbo].[Request]
FOR UPDATE
AS
    SET NOCOUNT ON
    INSERT INTO dbo.Request_changes
    (
        --ID,      // taken care of by IDENTITY(1,1)
        --LogDate, // uses default value of GetDate()
        ChangeAction,
        SQLServerUser,

        RequestID,
        UserIDContact,
        etc
    )
    SELECT
        'UPDATE',
        system_user,

        -- Request fields
        RequestID,
        UserIDContact,
        etc
    FROM
        inserted

    SET NOCOUNT OFF
GO

create TRIGGER [dbo].[tr_Request_insert]
ON [dbo].[Request]
FOR INSERT
AS
    SET NOCOUNT ON
    INSERT INTO dbo.Request_changes
    (
        --ID,      // taken care of by IDENTITY(1,1)
        --LogDate, // uses default value of GetDate()
        ChangeAction,
        SQLServerUser,

        RequestID,
        UserIDContact,
        Title,
        etc
    )
    SELECT
        'INSERT',
        system_user,

        -- Request fields
        RequestID,
        UserIDContact,
        etc
    FROM
        inserted

    SET NOCOUNT OFF
GO

У вас не обязательно есть доступ к таблице _changes (если вы не сопоставляете это с другим набором данных XSD), но это отлично подходит для ведения журнала и аудитаи отслеживание ошибок и истории.

Другие параметры

Возможно, у вас есть набор данных XSD, который не поддерживается постоянным хранилищем, таким как сервер SQL, и вы 'просто использовать в памяти наборы данных.Существует множество других шаблонов проектирования и хорошо известных конструкций, которые уведомляют вас об изменении значений свойств.

Кроме того, если вы используете наборы данных XSD, это потому, что вы работаете с существующей кодовой базой или устаревшейприложение?Если вы занимаетесь новыми разработками, я бы держался от них подальше.Это старая технология, которую MS больше не развивает.Если вы хотите остаться в стеке MS, который поставляется с текущими версиями Visual Studio, вашими лучшими ставками будут Linq to Sql или Entity Framework, которые должны быть проще в обращении и более гибкими (например, я нене думаю, что наборы данных XSD очень хорошо обрабатывают нулевые значения, и они не поддерживают .NET сгенерированные типы в генерируемых классах).

...