Sql Server CE Вставить сбой без ошибок - PullRequest
1 голос
/ 23 марта 2011

У меня проблема с вставкой некоторых данных в таблицу.

Я сделал программу с простой БД.Я использую

  • c #
  • framework 3.5
  • sql server mobile
  • Программа запускается на устройстве GPRS.Каждый день он получает zip-файл, распаковывает его и вставляет строки в некоторые таблицы.

Некоторые цитаты

Откройте соединение:

SqlCeConnection conn = new SqlCeConnection("DataSource = " + file);
conn.Open();                

Напишитестрока:

String sql = "INSERT INTO Mercati(id,descr) VALUES(643,'SHAMPOO')"
SqlCeCommand execute = conn.CreateCommand();
execute.CommandText = sql;
int result = execute.ExecuteNonQuery();
execute.Dispose();

Таблица данных выглядит так:

CREATE TABLE Mercati(id int PRIMARY KEY,descr nvarchar(40));

Это внутри try / catch.И каждый раз, когда результат равен 1 (я вырезал код отладки).Я повторяю это в разных таблицах с разными данными.

Но ИНОГДА (1 раз в 4/5 передач) с одной таблицей данные не вставляются, результат = 1 и исключений нет.

  • Каждый раз, когда я передаю, я перезагружаю устройство, и моя программа перезапускается.
  • Таблицы очищаются каждый раз (УДАЛИТЬ ИЗ Mercati)
  • Данные каждый раз одинаковы (те,являются основой для работы, но иногда они могут меняться несколько месяцев)

У меня действительно нет идей.Я не могу понять, в чем проблема.Или просто, как я могу решить эту проблему.Любое решение или совет?

Большое спасибо Daniele

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Единственное, что я могу придумать, это приведет к исчезновению вставленных данных, это управление транзакциями.Есть ли у вас программирование на COMMIT / ROLLBACK?

Есть ли вероятность, что строка подключения будет изменена на другую БД?

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

0 голосов
/ 31 марта 2011

Я решил.

После ВСТАВКИ я делаю некоторые резервные копии, затем я перезагружаю устройство.НО я не закрывал БД.

Странно, что я выполнил совет SeaDrive, и после моих вставок таблица содержит точное количество строк.Я сделал 9 INSERT и мой выбор вернул 9 Rows.After reset У меня только 1 строка.

Я думаю, что есть какой-то кэш, который прозрачен во время выполнения, но оставил физический файл без изменений, если только DBон закрыт.

Я надеюсь, что это поможет другим бедным разработчикам, таким как я, закрыть их БД: D

...