'NameSpace.Settings'的类型初始值设定项引发了异常

时间:2012-01-23 11:59:33

标签: c# entity-framework exception

我有一个非常简单的课程,我添加了方法GetConnectionString()。在每次从Settings类访问任何值时添加它都会引发异常The type initializer for 'NameSpace.Settings' threw an exception.只要我删除GetConnectionString()程序就可以正常工作。

using System.Data.EntityClient;
using System.Data.SqlClient;

namespace CRM {
static class  Settings {
    public static bool userAuthenticated = false;

    public static string userGroup = "";
    public static Klienci currentlySelectedClient;
    public static string sqlDataConnectionDetailsCRM = GetConnectionString();

    public static string GetConnectionString() {
        string connection = "";

        SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
        sqlBuilder.InitialCatalog = dbInitialCatalog;
        sqlBuilder.DataSource = dbServer;
        sqlBuilder.IntegratedSecurity = false;
        sqlBuilder.UserID = dbUserName;
        sqlBuilder.Password = dbPasswWord;
        sqlBuilder.MultipleActiveResultSets = true;

        EntityConnectionStringBuilder entity = new EntityConnectionStringBuilder();
        entity.Metadata = @"res://*/Data.System.csdl|res://*/Data.System.ssdl|res://*/Data.System.msl";
        entity.Provider = "System.Data.SqlClient";
        entity.ProviderConnectionString = sqlBuilder.ToString();

        connection = entity.ToString();

        return connection;
    }
}

}

如果我注释掉sqlBuilder和实体。它工作正常..

    public static string GetConnectionString() {
        string connection = "";

        SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
        //sqlBuilder.InitialCatalog = dbInitialCatalog;
        //sqlBuilder.DataSource = dbServer;
        //sqlBuilder.IntegratedSecurity = false;
        //sqlBuilder.UserID = dbUserName;
        //sqlBuilder.Password = dbPasswWord;
        //sqlBuilder.MultipleActiveResultSets = true;

        EntityConnectionStringBuilder entity = new EntityConnectionStringBuilder();
        //entity.Metadata = @"res://*/Data.System.csdl|res://*/Data.System.ssdl|res://*/Data.System.msl";
        //entity.Provider = "System.Data.SqlClient";
        //entity.ProviderConnectionString = sqlBuilder.ToString();

        connection = entity.ToString();

        return connection;
    }

发生了什么事?对我来说似乎很好..

编辑:

的InnerException:

  

exception =“System.ArgumentNullException:值不能   null。\ r \ nParameter name:Initial Catalog \ r \ n at   System.Data.SqlClient.SqlConnectionStringBuilder.set_InitialCatalog(字符串   价值)\ r \ n在CRM.Settings.GetConnectionString()中   C:\项目\ Project.C.S ...

虽然在“设置”类中设置了public static string dbInitialCatalog = "BazaCRM";

2 个答案:

答案 0 :(得分:2)

根据您的错误,dbInitialCatalog的值似乎为null,因此连接字符串构建器会抛出错误。因为这是在类的静态构造函数中,所以无法加载类型本身并且整个事情都失败了。

您是否尝试过亲自手动提供连接字符串?

答案 1 :(得分:2)

无法保证正在初始化的字段的顺序。这里发生的是sqlDataConnectionDetailsCRM正在dbInitialCatalog字段之前进行初始化。

如果您将其他静态字段更改为const,则应修复它。

或者更好的方法可能是删除公共静态字段,并从方法中检索连接字符串,或者您可能还想调查Lazy<T>类,并使用它来构建连接字符串第一次需要它。