Я использую Visual Studio 2008 Pro.
Вероятно, я, вероятно, пропустил что-то очень очевидное, но я пытался получить CTP для Sql Server compact 4 для работы в моем приложении asp.net mvc. Я не могу найти рядом с инструкцией о том, как установить это приложение или рабочий пример приложения. Моя цель - частная установка, поэтому я могу просто включить ее в свое веб-приложение, не требуя установки сервера SQL на моем доменном хостинге. На самом деле я просто стреляю в ветер и пытаюсь понять это. Я не планирую размещать рынок или что-либо еще с этим.
Итак, я скопировал всю DLL, которая устанавливает в базовом 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 из моих ссылок на проекты.
Любопытная вещь здесь, когда я нажимаю правой кнопкой мыши и смотрю на свойства ссылочной dll SqlServerCE, она всегда говорит о ее версии 4.0.0.1.
Ребята, я действительно мог бы использовать какое-то направление здесь. Я искал переполнение стека, документы справки, книги в Интернете и googled. Я действительно не нашел ничего, что берет это с самого верха для 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 Conversion Tool. Версия 3.5.21022.8 Copyright (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 бит. Это тот случай?
ДОБАВЛЕННЫЕ ДАННЫЕ
На сегодняшний день приведенные ниже конфигурации были опробованы на двух машинах. Оба являются Windows xp sp3 32 бит с 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.
Результаты те же, что и CONFIGURATION # 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.
Полезная ссылка: