Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
Написал тестовоеприложение на c# net 3.5 + sql ce.
Пробую открыть на другом компе - не открывается, ошибка. fw установлен.
Может что-то нужно доустановить для запуска sql ce *.sdf?
20 июн 11, 13:31    [10840095]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Jenya4
Пробую открыть на другом компе - не открывается, ошибка.

Оно?

К сообщению приложен файл. Размер - 7Kb
20 июн 11, 13:39    [10840150]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
Нет, не оно.
20 июн 11, 13:51    [10840255]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
У нас игра "угадай текст ошибки с трех попыток", что ли?
20 июн 11, 13:52    [10840262]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
Обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.
20 июн 11, 13:54    [10840282]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
На другом компе не установлен sql server.
Может нужно провайдер установить или dll какие в папку с приложением бросить?
20 июн 11, 14:21    [10840494]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
Плюс: обычное приложение без использование sdf запускается нормально.
20 июн 11, 14:35    [10840661]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Jenya4
Обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.


даже извинения...

а обложить в приложении кусок кода try catch и посмотреть что за фигня там случается?
20 июн 11, 14:59    [10840884]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
Winnipuh, пишет, что отсутствует поставщик. Его можно отдельно скачать с сайта microsoft?
Возможно ли его включить в проект установки приложения?

К сообщению приложен файл. Размер - 33Kb
20 июн 11, 15:35    [10841166]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Jenya4
Winnipuh, пишет, что отсутствует поставщик. Его можно отдельно скачать с сайта microsoft?
Возможно ли его включить в проект установки приложения?


можно включить инсталлятор, возможно также его можно включить в приложение указав копи локал
20 июн 11, 15:50    [10841303]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
возможно также его можно включить в приложение указав копи локал

Можно поподробнее?
20 июн 11, 16:03    [10841442]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Jenya4
возможно также его можно включить в приложение указав копи локал

Можно поподробнее?


я не пробовал именно этот провайдер, но попробуйте...
Вы делаете референсе ассембли ? включаете эту длл в прожект? посмотрите свойства, есть там свойство Copy Local, ставтье его в труе, и будет ваша ассембли копироваться вместе с приложением.
20 июн 11, 16:32    [10841626]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
serkuzm
Member

Откуда:
Сообщений: 42
Jenya4,

А у Вас случайно приложение не использует EntityFramework 1.0?
Я к чему, если да, то нужно инсталлировать на другую машину провайдер для выбранной базы данных.
В момент установки он обычно прописывает в machine.config сроки в секцию system.data.
Например вот так:
  <system.data>
    <DbProviderFactories>
      <add name="Microsoft SQL Server Compact Data Provider" 	invariant="System.Data.SqlServerCe.3.5" 	description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>      
      <add name="FirebirdClient Data Provider" 			invariant="FirebirdSql.Data.FirebirdClient" 	description=".Net Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/>
      <add name="MySQL Data Provider" 				invariant="MySql.Data.MySqlClient" 		description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
    <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.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
   </DbProviderFactories>
  </system.data>
+ возможно чем-то помусорит в <configuration> <configSections> <section ....

Но можно не уставливать на клиентскую машину провайдер, но в самых-самых первых строках программы "зарегистрировать" провайдер вручную:
            try
            {
                var dataSet = ConfigurationManager.GetSection("system.data") as System.Data.DataSet;

                DataRow providerString = dataSet.Tables[0].Rows.Cast<DataRow>().Where(q => q[0].ToString() == "FirebirdClient Data Provider").FirstOrDefault();

                if (providerString == null)
                {
                    dataSet.Tables[0].Rows.Add("FirebirdClient Data Provider"
                    , "Net Framework Data Provider for Firebird"
                    , "FirebirdSql.Data.FirebirdClient"
                    , "FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c");
                }
            }
            catch (Exception er)
            {
                Debug.WriteLine(er.ToString());
            }

Пример для Firebird, но думаю что для Microsoft SQL Server Compact Data Provider изменить будет не сложно.
Тогда рядом с исполняемым файлом нужно положить сборки самого провайдера.
И наступит счастье без установки провайдера. Кстати, так можно успешно нарисовать portable версию программы.

з.ы.
У самого программа была .NET3.5 + MySQL + EF1.0 и на часть клиентских машин РОДНОЙ инсталлятор MySQL EntityFramwork провайдера тупа валил ошибку и откатывался.
Описанный способ с отказом от необходимости установки решил вопрос.
20 июн 11, 17:55    [10842374]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
EF не использую.

Пробовал добавлять конфиг, добавлял dll от SQL CE... Не помогает.
<?xml version="1.0" encoding="utf-8" ?> 
 <configuration> 
   <system.data> 
     <DbProviderFactories> 
       <remove invariant="System.Data.SqlServerCe.3.5" /> 
       <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> 
     </DbProviderFactories> 
   </system.data> 
 </configuration>


Только когда в паблише добавил требование SQL CE (http://msdn.microsoft.com/en-us/library/aa983326(v=VS.100).aspx) и сделал Publish, тогда оно что-то проинталировало приложение и SQL CE и все это чудо заработало. Но простыми dll-ками дело не обошлось :(
20 июн 11, 18:04    [10842460]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
serkuzm
Member

Откуда:
Сообщений: 42
Jenya4,

Там dll-ки тоже разные есть.
Одни - это сборки непосредственно самого SQL Server Compact Edition:
C:\Program Files\Microsoft SQL Server Compact Edition\v3.5
sqlceca35.dll
sqlcecompact35.dll
sqlceer35EN.dll
sqlceme35.dll
sqlceoledb35.dll
sqlceqp35.dll
sqlcese35.dll

И другие - это managed сборки .NET провайдера(-ов) для работы с SQL Server Compact из-под .NET
C:\Program Files\Microsoft SQL Server Compact Edition\v3.5 + поддиректории
System.Data.SqlServerCe.dll
System.Data.SqlServerCe.Entity.dll

По хорошему можно было попробовать все эти сборки скопировать на "клиента" рядом с исполняемым файлом и попробовать запустить... Ну это так, как вариант. Думаю должно получиться без установки провайдера.
20 июн 11, 18:19    [10842584]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
serkuzm,
Да, все эти dll, кроме System.Data.SqlServerCe.Entity.dll, я добавлял. Попробую еще раз.
21 июн 11, 09:11    [10844486]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
Все равно не работает :(
21 июн 11, 12:34    [10845869]     Ответить | Цитировать Сообщить модератору
 Re: c# + sql ce  [new]
Jenya4
Member

Откуда:
Сообщений: 22
Заработало с таким конфигом :)
<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.3.5" />
      <add name="Microsoft SQL Server Compact Data Provider"
           invariant="System.Data.SqlServerCe.3.5"
           description=".NET Framework Data Provider for Microsoft SQL Server Compact"
           type="System.Data.SqlServerCe.SqlCeProviderFactory,
                 System.Data.SqlServerCe,
                 Version=3.5.1.0,
                 Culture=neutral,
                 PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>
21 июн 11, 13:41    [10846531]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить