代码之家  ›  专栏  ›  技术社区  ›  Martin Ongtangco

尝试获取数据库类型的实例时发生激活错误,键“”<-blank

  •  11
  • Martin Ongtangco  · 技术社区  · 14 年前

    我正在试用Enterprise Library 5.0,并在我的BL上进行了一些单元测试,我需要在DL上或测试项目上使用app.config吗?

    如何使用DAAB:

    private static Database db = DatabaseFactory.CreateDatabase();
    
    db.ExecuteNonQuery("spInsertSalesman", salesman.Fullname);
    

    我在DL上的app.config:

    <configuration>
        <configSections>
            <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
        </configSections>
        <dataConfiguration defaultDatabase="DBTEST" />
        <connectionStrings>
            <add name="DBTEST" connectionString="Data Source=[dbsource];Initial Catalog=[dbname];User Id=sa;Password=password;"
                providerName="System.Data.SqlClient" />
        </connectionStrings>
    </configuration>
    
    7 回复  |  直到 14 年前
        1
  •  3
  •   granadaCoder    11 年前

    再加上其他原因。

    我有一个VS2010解决方案/csproj,它引用了企业库5.0.xxxxx。

    然而,csproj被设置为“目标3.5框架”。因此,我要么需要针对4.0框架,要么“向下”到企业库的3.5版本。

    我能够将目标框架更新到4.0,然后错误就消失了。

    以下是您可以执行的操作,以确定代码是为哪个框架版本编译的: (Powershell小脚本)

    [System.Reflection.Assembly]::LoadFrom("c:\somefolder\Any_Of_The_Practices.dll").ImageRuntimeVersion
    

    编辑:

    我正在发布一个MySql配置,我在这个URL找到了它: (我正在复制,以防将来URL失效)

    http://searchcode.com/codesearch/view/14385662 )

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true"/>
    </configSections>
    
    <system.data>
    <DbProviderFactories>
    <add name="EntLibContrib.Data.MySql"
    invariant="EntLibContrib.Data.MySql"
    description="EntLibContrib Data MySql Provider"
    type="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" />
    </DbProviderFactories>
    </system.data>
    
    <dataConfiguration defaultDatabase="Default Connection String">
    <providerMappings>
    <add databaseType="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null"
    name="EntLibContrib.Data.MySql"/>
    </providerMappings>
    </dataConfiguration>
    
    <connectionStrings>
    <add name="Default Connection String"
    connectionString="database=northwind;uid=root;pwd=admin"
    providerName="EntLibContrib.Data.MySql"/>
    </connectionStrings>
    
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
    </configuration>
    

    最后:

    一旦我得到这个错误,因为我没有一个ConnectionString(在配置文件中)与defaultDatabase值同名。又名,简单的“头骨麻木”错误。

    如果你愿意的话,你可以把这个安全阀代码放进去(在你创建数据库之前)。

            DatabaseSettings dataConfig = (DatabaseSettings)ConfigurationManager.GetSection("dataConfiguration");
            string configDefaultDatabase = string.Empty;
            if (null != dataConfig)
            {
                configDefaultDatabase = dataConfig.DefaultDatabase;
    
                if (!String.IsNullOrEmpty(configDefaultDatabase))
                {
                    ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings;
                    if (null == connections[configDefaultDatabase])
                    {
                        throw new ArgumentOutOfRangeException(
                            string.Format(
                                "Your dataConfiguration (DefaultDatabase) does not match any of your connection strings.  DefaultDatabase='{0}'.",
                                configDefaultDatabase));
                    }
                }
            }
    
        2
  •  1
  •   Sujoy Roy Chowdhury    12 年前

    从程序集中删除dll并尝试运行。

    1. 开始-->运行
    2. 删除发生激活错误的dll。
    3. 重置IIS

    希望它能解决你的问题。

        3
  •  0
  •   Brian Webster    11 年前

        4
  •  0
  •   Karol Marian Słuszniak    11 年前

    我有同样的问题,我通过将EntLib从5.0更改为3.1来解决它

        5
  •  0
  •   TheEvilPenguin    10 年前

    因为类库可以有app.config文件。当您使用EntLib 5.0&want访问libarry类中的连接字符串时,这真的没有帮助。因此,您需要将上述配置添加到解决方案中使用的所有web.config文件中。例如,如果您有UI层,那么WCF层位于业务(类库)和UI层之间,而业务层位于WCF服务和DAL(类库)之间。

    在这里,每个UI层和WCF服务层中都有一个web.config文件,因此这两个web.config文件应该包含上述设置。

        6
  •  0
  •   BA TabNabber    9 年前

    确保您的服务器安装了MySQL.net连接器。在安装连接器之前,我也遇到了同样的错误。 http://www.mysql.com/products/connector/

        7
  •  -2
  •   humbads    13 年前

    Database db = DatabaseFactory.CreateDatabase("DBTEST");
    

    而不是

    Database db = DatabaseFactory.CreateDatabase();