Не может заставить SQL-сервер компактные 3.5 / 4 работать с ASP.NET MVC 2

Я использую 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.

Полезная ссылка:

http://blogs.msdn.com/b/sqlservercompact/archive/2010/07/07/introducing-sql-server-compact-4-0-the-next-gen-embedded-database-from-microsoft.aspx

22
задан Eric Labashosky 3 August 2010 в 01:38
поделиться

2 ответа

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()));
            }
        }
    }
31
ответ дан 29 November 2019 в 04:23
поделиться

Хорошо, вот предположение, раз уж вы их ловите.

Запустите corflags.exe для сборки, которую вы скопировали в каталог ссылок. Для какого типа машины вы строите? Если вы работаете на 64-битной машине и компилируете в x64 или anyCpu, убедитесь, что corflags сообщает вам, что ваши ссылки не являются только 32-битными ссылками. Может быть, это «откат» к неправильной версии в вашем GAC или что-то в этом роде. Если он сообщает вам, что указанная сборка является только 32-разрядной, скомпилируйте свой проект как 32-разрядный проект или найдите 64-разрядную версию DLL?

2
ответ дан 29 November 2019 в 04:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: