Я использую Visual Studio 2008 Pro.
Возможно, мне здесь не хватает чего-то очень очевидного, но я пытался заставить CTP для Sql Server compact 4 работать в моем приложении asp.net mvc. Я не могу найти рядом с инструкцией о том, как настроить это или рабочий пример приложения. Моя цель - частная установка, поэтому я могу просто включить ее в свое веб-приложение, не выполняя настройку сервера sql на хостинге моего домена. Это действительно только я стреляю в ветер и пытаюсь понять это. Я не планирую устраивать рынок или что-то подобное.
Итак, я скопировал все dll, которые устанавливаются в направлении base 4.0 (c: \ Program Files \ Sql Server compact \ v4.0), в папку lib в моем приложении. Я установил для параметра «Копировать в выходное направление» значение «Копировать, если новее». Затем я ссылаюсь на dll System.Data.SqlServerCE и устанавливаю для параметра «Копировать локальный» значение True.
Я создал файл sdf через Sql Studio Express. Важным примечанием является то, что я не видел опции для создания версии этого файла для CE 4.0, поэтому он был создан с использованием CE 3.5. Я создаю несколько таблиц, добавляю несколько строк в эти таблицы, копирую файл * .sdf в мой каталог App_Data. Стоит отметить, что внутри VS 2008 этот файл никогда не появляется в моем проекте, но он существует в физическом расположении каталога App_Data. Я не уверен, почему это так.
Далее я просто пытаюсь установить базовое соединение с моим файлом sdf через:
SqlCeConnection conn = new SqlCeConnection("DataSource=rpg.sdf");
Это приводит к ошибке ниже:
Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8402. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.
Я полагаю отсюда, я просто попробую заставить работать Sql CE 3.5. Я обновляю локальную версию Sql CE 3.5 до sp2. Я копирую dll в базовом расположении (c: \ Program Files \ Sql Server compact \ v3.5), включая удаление и чтение версии dll System.Data.SqlServerCE из ссылок на мои проекты.
Любопытно, что когда я щелкаю правой кнопкой мыши и смотрю на свойства ссылочной библиотеки SqlServerCE, она всегда говорит, что это версия 4.0.0.1.
Ребята, я действительно мог бы использовать какое-то направление здесь. Я искал переполнение стека, справочные документы, книги в Интернете и гуглил. Я действительно не нашел ничего, что бы взяло это с самого верха для CE 3.5 или 4.0 и точно скажет мне, что добавить dll, куда их поместить, как ссылаться на них, как добавить файл .sdf в мой проект, подключиться к нему и запросить его. Я наткнулся на несколько упоминаний примера приложения портала IBuySpy, в котором предполагалось использовать Sql CE 3.5, но на самом деле я не могу ориентироваться в лабиринте загрузки msdn, чтобы добраться до него. В идеале я хочу настроить частное развертывание для CE 4.0.
У меня все уши. Предложения, баллы, все, что будет высоко оценено. Спасибо!
ДА Я ВИДЕЛ КБ. ЭТО НЕ ПОМОГЛО
Смотрите здесь: http://support.microsoft.com/kb/974247
РЕЗУЛЬТАТЫ ОТ КОРФЛАГА
Хорошо, попробовал это, и вот мои результаты:
C: \ Development \ Mvc2MessingAround \ Mvc2MessingAround \ bin \ Lib> corflags System.Data.
SqlServerCe.dll
Microsoft (R) .NET Framework Инструмент преобразования CorFlags. Версия 3.5.21022.8
Авторские права (c) Корпорация Microsoft. Все права защищены.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 1
Я бы поклялся, что установил x86-версию обеих версий Sql CE (3.5 / 4). Установщик мог запутаться как-то, потому что мой процессор поддерживает 64 бита, но я использую Windows XP SP 3 32 бит. Результаты показывают, что он 64-битный. Это тот случай?
ДОБАВЛЕННЫЕ ДЕТАЛИ
На сегодняшний день приведенные ниже конфигурации были опробованы на 2 машинах. Оба являются 32-разрядными Windows XP SP3 с 64-разрядным процессором. Средой разработки на обоих является VS 2008 Pro. Результаты на машине 2 получены после новой установки Sql CE 4 Ctp.
КОНФИГУРАЦИЯ № 1
myapp\bin\
System.Data.SqlServerCe.dll
myapp\bin\private
amd64
x86
myapp\bin\private\x86
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
myapp\bin\private\amd64
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
Ошибка:
An exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.DLL but was not handled in user code
Additional information: Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8402. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.
Код:
SqlCeConnection conn = new SqlCeConnection();
КОНФИГУРАЦИЯ 2
То же, что # 1, но с System.Data.SqlServerCE.Entity.dll в направлении myapp \ bin.
Ошибка страницы перед попаданием кода выше.Это сообщение:
Не удалось загрузить файл или сборку 'System.Data.SqlServerCe.Entity' или одну из ее зависимостей.Эта сборка создается средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена.
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.BadImageFormatException: Не удалось загрузить файл или сборку 'System.Data.SqlServerCe.Entity' или одну из ее зависимостей.Эта сборка создается средой выполнения, более новой, чем текущая загруженная среда, и не может быть загружена.
Я проверил настройки проекта в VS 2008 Pro, и в качестве цели установлена среда .Net 3.5.
КОНФИГУРАЦИЯ 3
То же, что и # 1, за исключением того, что System.Data.SqlServerCE.dll ссылается на папку myapp \ bin \ private.
Результатытакой же, как КОНФИГУРАЦИЯ № 1 (сообщение об ошибке на 100% одинаковое, и ошибка возникает в той же строке кода).
ПРАВИЛЬНАЯ КОНФИГУРАЦИЯ
Согласно инструкциям Эрика (имелЯ следовал за ними более тщательно), установка должна быть
myapp\bin
x86
amd64
System.Data.SqlServerCE.dll
Ссылка на System.Data.SqlServerCE.dll прямо из папки bin для кода.Моя глупость думала, что Личная папка должна быть включена, но это не так.Не помещайте System.Data.SqlServerCE.Entity.dll в папку bin, если вы не используете решение .net 4.0.Я не думаю, что dll работает с 3.5.
Полезная ссылка:
http://blogs.msdn.com/b/sqlservercompact/archive/2010/07/07/introducing-sql-server-compact-4-0-the-next-gen-embedded-database-from-microsoft.aspx