4

我在 Excel 使用的 c# 中编写了 dll(该 dll 是 COM 注册的)。我与 Excel 连接没有问题。dll 使用 Entity Framework 5 从 SQL Server 数据库中检索数据。如果我通过控制台应用程序运行 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=&quot;data source=CQI-Laptop1;initial catalog=MegaDaily;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

它工作得很好。

所以我的问题是,如何让 Excel 使用此连接?Excel 有配置文件吗?

谢谢

4

1 回答 1

2

找不到连接字符串的原因是因为 .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")
{
    ...
}

或者看看如何从代码中设置连接字符串

于 2013-10-25T19:07:12.153 回答