Я использую SQL Server 2008, visual studio 2008, linq, ado.net в моем текущем проекте. Этот проект реализован в Интернете и на рабочем столе.
Теперь моя проблема с синхронизацией данных между веб-базой данных и настольной базой данных.
здесь синхронизация выглядит следующим образом:
- новые данные, вставленные в клиент, синхронизируются с сервером.
- Обновленные данные в клиенте синхронизируются с сервером.
здесь позвольте мне показать вам мою структуру таблицы.
допустим, мое имя таблицы "customer" с полями
клиент
...................
customerno, bigint, первичный ключ, не ноль, идентификатор true (начиная с 1)
имя, ...
фамилия, ...
теперь у меня будет та же самая таблица в клиенте, но идентификация первичного ключа начнется с 20000. Эта идентификация первичного ключа зависит от количества клиентских систем. рассмотрим следующий сценарий
сервер = customerno, начиная с 1, с 1 записью в таблице
client1 = customerno, начиная с 20000, с 2 записями в таблице
client2 = customerno, начиная с 30000, с 3 записями в таблице
теперь, когда я нажимаю синхронизацию в client1, используя следующий код
cmd.CommandText = "set identity_insert " + tableName + " on";
cmd.ExecuteNonQuery();
foreach (string query in this.queries)
{
cmd.CommandText = query; // this is my insert query
cmd.ExecuteNonQuery();
}
cmd.CommandText = "set identity_insert " + tableName + " off";
cmd.ExecuteNonQuery();
, поскольку linq не поддерживает identity_insert, я использую ado.net
в моем коде сначала я включаю identity_insert, вставляю данные и, наконец, отключаю identity_insert.
теперь вот моя проблема, после синхронизации данных с client1,
и две записи вставляются на сервер с customerno как 20001,20002.
согласно http://msdn.microsoft.com/en-us/library/ms188059.aspx
для идентификатора столбца customerno на сервере установлено максимальное значение (в этом случае это будет 20002).
так что теперь, когда я вставляю данные на сервер, он вставляется с customerno как 20003.
здесь я не хочу, чтобы столбец идентификатора сервера принимал максимальное значение.
учитывая вышеописанный случай, перед синхронизацией у нас есть 1 запись на сервере, и ее идентификатор равен 1, поэтому после синхронизации (с одним или несколькими клиентами) я хочу, чтобы следующий идентификатор (customerno) на сервере был равен 2,3 , 4 ..... для вновь вставленных данных на сервере.
здесь любой клиент может синхронизировать данные с сервером в любой момент времени.