Я написал dll в С#, который используется Excel (DLL зарегистрирован COM). У меня нет проблем с подключением к Excel. Dll извлекает данные из базы данных SQL Server с использованием Entity Framework 5. Если я запускаю DLL через консольное приложение, DLL отлично работает. Но когда я запускаю его через Excel (через VBA), я получаю исключение InvalidOperationException. Сообщение об ошибке "Нет строки соединения с именем" MegaDailyEntities "можно найти в файле конфигурации приложения. Это происходит в первый раз, когда я пытаюсь получить данные из базы данных.
Я столкнулся с этой проблемой с консольным приложением, но затем я включил следующее в свой файл App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="MegaDailyEntities" connectionString="metadata=res://*/MegaDaily.csdl|res://*/MegaDaily.ssdl|res://*/MegaDaily.msl;provider=System.Data.SqlClient;provider connection string="data source=CQI-Laptop1;initial catalog=MegaDaily;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
и он работал нормально.
Поэтому мой вопрос: как мне заставить Excel использовать это соединение? Есть ли файл конфигурации для Excel?
благодаря
Причина, по которой строка подключения не найдена, заключается в том, что файлы.config существуют только для приложений (.exe), но не для дополнительных библиотек (.dll)
Процесс Excel пытается загрузить строку подключения из Excel.exe.config, вместо загрузки из yourlibrary.dll.config
Рабочее решение для этого - отредактировать файл *.context.tt (генератор классов EntityFramework) и создать для вас DbContext. Вы найдете что-то вроде:
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
...
}
Должно быть возможно изменить его на
public <#=code.Escape(container)#>()
: base("your EF connection string")
{
...
}
Или посмотрите, как установить строку подключения из кода