Это наша среда:
Визуальная студия 2008
Портативное устройство: Datalogic X4 Skorpio WE7 (пока нет другого устройства WE7, чтобы убедиться, что поведение такое же)
System.Data.SqlServerCe.dll
: 3.5.8080Вот что мы переживаем:
При попытке применить ИНДЕКС к любой таблице любого файла .SDF
он выполняется нормально и применяет ограничение. Этот индекс можно сделать с помощью кода или с помощью средства просмотра базы данных, такого как sdfviewer. Проблема проявляется только тогда, когда .SDF
был отправлен в X4 korpio. Что происходит, так это то, что любой столбец, к которому применено ограничение INDEX, не может вернуть ничего, кроме 0, когда запросы (т.е. SELECT * FROM Users WHERE [TheIndexedColumn] = 'Bananas'
возвращает 0, Banana существует, но если вы выполните «SELECT * FROM Users», вы получите все столбцы.).
Пример: таблица Users
UserID (INT or BIGINT or NVARCHAR) – This is the primary key and also indexed
Firstname (NVARCHAR)
LastName (NVARCHAR)
...
Предположим, что эта таблица Users
была заполнена многими пользователями с именами и фамилиями (уникальные пользователи). Если бы мы запросили столбец UserID
, мы получили бы результат 0. Если бы индекс был удален, мы могли бы успешно применить множество различных запросов.
Открытие файла .SDF
с помощью средства просмотра sdf не выявило признаков повреждения (из того, что мы видим). На устройстве Datalogic X4 базу данных можно открывать и закрывать без каких-либо ошибок во время выполнения.
Есть ли сценарии, в которых этой проблемы не существует?
Пожалуйста, обратитесь к этой таблице, чтобы увидеть, где он работает без сбоев
Выводы по устранению неполадок на данный момент:
.SDF
(файл базы данных) ведет себя нормально при развертывании (база данных открывается и закрывается) из среды Windows 7..SDF
, хранившийся на компьютере с Windows 7, на Skorpio X4, приложение будет работать нормально.Любая помощь будет высоко оценена, поскольку мы исчерпали все варианты до сих пор. Использование Windows 7 не вариант :(
Похоже, у вас могут быть дубликаты индексов, первичному ключу не нужен явный индекс
Версия среды выполнения на X4 тоже 8080?
@tcarvin - Извини, приятель, да, это опечатка, я отредактировал.
Привет, @ErikEJ, спасибо, что вмешались, итак, у нас есть X3 с Win CE 6.0 и устройство X4 с WE7. У нас были некоторые проблемы совместимости с установкой CAB-файлов SqlServerCE при холодной загрузке устройств (X4 жалуется на совместимость при установке CAB-файла, хотя после установки он работает правильно). Мне пришлось прибегнуть к связыванию "System.Data.SqlServerCe.dll: 3.5.8080" со сборкой программного обеспечения для обоих устройств. Никакие другие установки, поддерживающие sqlserverce, не установлены. Просто к вашему сведению, развертывание на Win CE6.0 не вызывает никаких проблем!
Кроме того, могу подтвердить, что нет повторяющихся записей, я сократил все данные до очень простого файла sdf db, чтобы упростить задачу при устранении неполадок. В каждой таблице доступно только несколько записей.
Не стесняйтесь поделиться со мной файлом добавления ..
Я бы также рассмотрел возможность использования более новой сборки движка: erikej.blogspot.com/2010/08/…
Привет, ErikEJ, Ни одна из ссылок из вашей ссылки выше, похоже, не указывает на загружаемый файл исправления, все они приходят с сообщением «Исправление больше не доступно» :( Если я не иду в неправильные места. Любые предложения? Большое спасибо
Даже Microsoft теперь рекомендует SQLite для разработки встраиваемых систем, ненавижу это говорить, но вы можете подумать о преобразовании. Отдельно я наткнулся на это предупреждение о совместимости в CAB, вы можете отредактировать CAB и удалить этот флаг, если вам нужно. (однако отдельная тема).
Вы не пишите как вы разворачиваете или копируете sdf на устройство. Существуют известные проблемы с проводником XP, выполняющим преобразование «формата» при копировании файлов известных типов с/на устройство. Вероятно, вам следует добавить первичный ключ в таблицу базы данных из кода на устройстве. Вы также можете просто скопировать / развернуть sdf, а затем сравнить файл на устройстве с оригиналом.
@nullpointer Не стесняйтесь обращаться ко мне по электронной почте, чтобы получить обновление двигателя
Привет всем, спасибо за помощь, в то время мы перешли на Sqlite с CE, так как поведение было слишком странным, чтобы определить основную причину.
Это опечатка:
Select * from [TheIndexedColumn]
? Вы выбираете изtable
не столбец