Как я могу изменить путь к файлу БД в App.config? - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь использовать mdf-файл sql server в winForm, используя сущность framwork 6, я не хочу устанавливать SQL Server на компьютер пользователя, чтобы использовать мое приложение winform.

Для этого я добавил новую модель сущности ADO.NET и выбрал файл базы данных sql,

теперь я пытаюсь получить доступ к файлу mdf (который находится в папке отладки моего проекта) из строки подключения App.config моя Строка подключения

<add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename=&quot;C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\miosystem_halqa.mdf&quot;;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />

и App.config

       <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <connectionStrings>
    <add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename=&quot;C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\miosystem_halqa.mdf&quot;;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

Код ниже для тестирования соединения

  miosystem_halqaEntities db = new miosystem_halqaEntities();

    private void Form1_Load(object sender, EventArgs e)
    {
        var j = db.ms_user.Where(x => x.user_id > 0).Select(x=>x.user_fname).ToList();

        for (int i = 0; i < j.Count; i++)
        {
            label1.Text += j[i].ToString() + "\r";
        }
    }

Я попытался использовать ~ в строке подключения, но получил ошибку

Базовый поставщик не удалось открыть.

<add name="miosystem_halqaEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=TOFIQ;attachdbfilename=&quot;~\miosystem_halqa.mdf&quot;;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />

Чего мне не хватает в строке подключения? как я могу использовать относительный путь и т. д.

1 Ответ

0 голосов
/ 08 мая 2018

С точки зрения относительного пути, если mdf-файл находится в папке отладки вашего проекта, вам не нужно указывать путь в строке подключения, поскольку ваш код будет выполняться из этого места.Попробуйте удалить ~ \ из строки подключения, оставив только имя файла.

Однако, даже если путь правильный, я не уверен, что он все равно будет работать, потому что экземпляр базы данных TOFIQ, на который есть ссылка в источнике данных, не 'не будет существовать на машине вашего клиента.Как сказал Панагиотис, я думаю, что вам понадобится SQL Server Express на клиентском компьютере или разместить файл на сервере, на котором установлен SQL Server, к которому у клиента есть доступ.

...