Подтвердить что ты не робот

Не удается получить sql server compact 3.5/4 для работы с ASP.NET MVC 2

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

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

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

4b9b3361

Ответ 1

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

ОБНОВЛЕНИЕ: используйте System.Data.SqlServerCe.dll из папки "Рабочий стол", чтобы избежать проблем со средним уровнем доверия

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.

Поместите файл sdf SQL Compact в папку 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()));
            }
        }
    }

Ответ 2

Если вы используете строку соединения, которая использует имя поставщика, и вы не установили SDK, вам также нужно добавить это к вам в web.config(или app.config)

  <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral"/>
        <bindingRedirect oldVersion="4.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0"/>
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
  </system.data>

ПРИМЕЧАНИЕ: "удалить" необходимо, если вы установили SDK, так как это будет помещать эту информацию в ваш machine.config

Ответ 3

Хорошо, вот догадаться, так как вы ловите их.

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

Ответ 4

Если вы устанавливаете поставщика SQL CE с помощью NuGet, самым простым решением является добавление шага после сборки, чтобы скопировать их из папки NativeBinaries пакета NuGet.

Ответ 5

Ключ для меня заключался в том, что версия System.Data.SqlServerCe.Entity.dll в личном каталоге (C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private) равна 4.0.0.1, где версия под каталогом рабочего стола (C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.Entity) - это 4.0.0.0. Версия System.Data.SqlServerCe.dll в личном каталоге - 4.0.0.0.

Я думаю, что было ошибкой со стороны Microsoft распространять обновленную SqlServerCe.Entity.dll без соответствующего обновления для SqlServer.dll.