Я использую Visual Studio 2008 Pro.
Я, вероятно, пропускаю что-то очень очевидное здесь, но я пытался заставить CTP для SQL-сервера компактные 4 работать в моем asp.net mvc приложение. Я не могу найти рядом ни с какой инструкцией относительно того, как настроить это или рабочий пример приложения. Моей целью является частная установка, таким образом, я могу просто включать ее в свое веб-приложение, не имея необходимость делать установку SQL-сервера на моем доменном хостинге. Это - действительно просто я трепание и попытка понять это. Я не планирую разместить рынок или что-либо с этим.
Так, я скопировал весь dll's, которые устанавливают в основе 4,0 направления (c:\Program Files\Sql Server compact\v4.0) к папке lib в моем приложении. Я установил копию для вывода опции направления 'Скопировать если Более новый'. Я затем ссылаюсь на Систему. Данные. SqlServerCE dll и набор 'Копируют Локальный' для Истинного.
Я создал 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. Я копирую dlls в основном местоположении (c:\Program Files\Sql Server compact\v3.5), включая удаление и передобавление версии Системы. Данные. SqlServerCE dll от моих ссылок проекта.
Любопытная вещь здесь состоит в том, когда я щелкаю правой кнопкой и смотрю на свойства SqlServerCE dll, на который ссылаются, она всегда говорит, что это - версия 4.0.0.1.
Парни, я действительно мог использовать некоторое направление здесь. Я искал переполнение стека, документы справки, книги онлайн, и погугленный. Я действительно не нашел ничего, что берет это от очень главного или для CE 3.5 или для 4.0 и говорит мне точно, какой dll's добавить, куда поместить их, как сослаться на них, как добавить .sdf файл к моему проекту, соединиться с ним, и запрашивают от него. Я действительно сталкивался с несколькими упоминаниями о портале IBuySpy демонстрационное приложение, которое, как предполагалось, использовало Sql CE 3.5, но не может на самом деле переместиться по лабиринту загрузки MSDN для получения до него. Идеально, я хочу установить частное, развертываются для CE 4.0.
Я внимательно слушаю. Предложения, точки, независимо от того, что высоко ценилось бы.Спасибо!
ДА Я ДЕЙСТВИТЕЛЬНО ВИДЕЛ КБ. ЭТО НЕ ПОМОГЛО
Посмотрите его здесь: http://support.microsoft.com/kb/974247
РЕЗУЛЬТАТЫ CORFLAG
Хорошо, попробованный это и они - мои результаты: C:\Development\Mvc2MessingAround\Mvc2MessingAround\bin\Lib> corflags Система. Данные. Инструмент SqlServerCe.dll Microsoft (R).NET Framework CorFlags Conversion. Версия 3.5.21022.8 Copyright (c) Microsoft Corporation.Все права защищены.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 1
Я поклялся бы, что установил x86 версию обеих версий CE Sql (3.5/4). Установщик, возможно, запутался так или иначе, потому что мой процессор составляет способные 64 бита, но я выполняю Windows XP sp 3 32 бита. Результаты, кажется, указывают, что это - 64 бита. Имеет место это?
ДОБАВЛЕННЫЕ ДЕТАЛИ
До настоящего времени конфигурации ниже попробовали на 2 машинах. Оба - 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 направлении.
Ошибки страницы прежде, чем поразить код выше. Это - сообщение:
Не мог загрузить файл или блок 'Система. Данные. SqlServerCe. Объект' или одна из его зависимостей. Этот блок создается временем выполнения, более новым, чем в настоящее время загруженное время выполнения, и не может быть загружен.
Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Рассмотрите отслеживание стека для получения дополнительной информации об ошибке и где это произошло в коде.
Детали исключения: Система. BadImageFormatException: не Мог загрузить файл или блок 'Система. Данные. SqlServerCe. Объект' или одна из его зависимостей. Этот блок создается временем выполнения, более новым, чем в настоящее время загруженное время выполнения, и не может быть загружен.
Я проверил настройки проекта в VS, 2008 Pro и платформа.Net 3.5 установлены как цель.
КОНФИГУРАЦИЯ 3
То же, поскольку на № 1, кроме System.Data.SqlServerCE.dll ссылаются от myapp\bin\private папки.
Результаты совпадают с КОНФИГУРАЦИЕЙ № 1 (сообщение об ошибке составляет 100%, то же и ошибка происходят на той же строке кода).
КОРРЕКТНАЯ КОНФИГУРАЦИЯ
На инструкции Erik (следовали за мной их более тщательно), установка должна быть
myapp\bin
x86
amd64
System.Data.SqlServerCE.dll
Сошлитесь на System.Data.SqlServerCE.dll непосредственно от папки мусорного ведра для кода. Мое безумие думало, что папка Private должна была быть включена, но это не делает. Не помещайте System.Data.SqlServerCE.Entity.dll в папку мусорного ведра, если Вы не используете решение .net 4.0. Я не думаю это w/3.5 работ dll.
Полезная ссылка:
SQL CE 3.5 не работает с ASP.NET, вы должны использовать 4.0 CTP.
Скачать с здесь.
Установите среду выполнения.
Скопируйте содержимое следующей директории (включая папки x86 и amd64) в папку bin вашего приложения ASP.NET: C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private
UPDATE: Используйте System.Data.SqlServerCe.dll из папки Desktop, чтобы избежать проблем Medium Trust
myapp\bin\
System.Data.SqlServerCe.dll
myapp\bin\x86
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
myapp\bin\amd64
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
Добавьте ссылку на файл System.Data.SqlServerCe.dll, который вы только что поместили в папку /bin.
Поместите файл SQL Compact sdf в папку App_Data.
Добавьте строку подключения:
<connectionStrings>
<add name ="NorthWind"
connectionString="data source=|DataDirectory|\Nw40.sdf" />
</connectionStrings>
Connect! :-)
using System.Data.SqlServerCe;
protected void Page_Load(object sender, EventArgs e)
{
using (SqlCeConnection conn = new SqlCeConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;
conn.Open();
using (SqlCeCommand cmd = new SqlCeCommand("SELECT TOP (1) [Category Name] FROM Categories", conn))
{
string valueFromDb = (string)cmd.ExecuteScalar();
Response.Write(string.Format("{0} Time {1}", valueFromDb, DateTime.Now.ToLongTimeString()));
}
}
}
Хорошо, вот предположение, раз уж вы их ловите.
Запустите corflags.exe для сборки, которую вы скопировали в каталог ссылок. Для какого типа машины вы строите? Если вы работаете на 64-битной машине и компилируете в x64 или anyCpu, убедитесь, что corflags сообщает вам, что ваши ссылки не являются только 32-битными ссылками. Может быть, это «откат» к неправильной версии в вашем GAC или что-то в этом роде. Если он сообщает вам, что указанная сборка является только 32-разрядной, скомпилируйте свой проект как 32-разрядный проект или найдите 64-разрядную версию DLL?