Найдено результатов: 2

Проверьте наличие изменений в таблице сервера SQL?

Как я могу контролировать базу данных сервера SQL на предмет изменений в таблице без использования триггеров или изменения структуры базы данных каким-либо образом? Моя предпочтительная среда программирования-это .NET и C#.

Я хотел бы иметь возможность поддерживать любой SQL Server 2000 SP4 или новее. Мое приложение - это простая визуализация данных для продукта другой компании. Наша клиентская база исчисляется тысячами, поэтому я не хочу вводить требования, чтобы мы изменяли таблицу сторонних поставщиков при каждой установке.

Под "changes to a table" я подразумеваю изменения в табличных данных, а не изменения в структуре таблицы.

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


Лучший способ действия, учитывая мои требования (никаких триггеров или модификаций схемы, SQL Server 2000 и 2005), по-видимому, заключается в использовании функции BINARY_CHECKSUM в T-SQL . Вот как я планирую это осуществить:

Каждые X секунд выполняйте следующий запрос:

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);

И сравните это с сохраненным значением. Если значение изменилось, пройдите по строкам таблицы с помощью запроса:

SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);

И сравните возвращенные контрольные суммы с сохраненными значениями.

sql   sql-server   datatable   rdbms    

600   8   16:03, 1st July, 2020


Возвращение DataTables в WCF/.NET

У меня есть сервис WCF, из которого я хочу вернуть DataTable. Я знаю, что это часто очень обсуждаемая тема, насколько возвращение DataTables является хорошей практикой. Давайте на минуту отложим это в сторону.

Когда я создаю DataTable с нуля, как показано ниже, нет никаких проблем вообще. Таблица создается, заполняется и возвращается клиенту, и все хорошо:

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    for(int i=0;i<100;i++)
    {
        tbl.Columns.Add(i);
        tbl.Rows.Add(new string[]{"testValue"});
    }
    return tbl;
}

Однако, как только я выхожу и нажимаю на базу данных для создания таблицы, как показано ниже, я получаю CommunicationException "The underlying connection was closed: The connection was closed unexpectedly."

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    //Populate table with SQL query

    return tbl;
}

Таблица заполняется правильно на стороне сервера. Он значительно меньше, чем тестовая таблица, которую я прокрутил и вернул, а запрос маленький и быстрый - здесь нет проблем с таймаутами или большой передачей данных. Используются те же самые точные функции и DataContracts/ServiceContracts/BehaviorContracts.

Почему способ заполнения таблицы имеет какое-либо отношение к успешному возвращению таблицы?

c#   .net   wcf   web-services   datatable    

542   8   13:59, 13th August, 2020