Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Nullreference位于自己的自定义Configsection上,无法对其进行调试_C#_Nullreferenceexception - Fatal编程技术网

C# Nullreference位于自己的自定义Configsection上,无法对其进行调试

C# Nullreference位于自己的自定义Configsection上,无法对其进行调试,c#,nullreferenceexception,C#,Nullreferenceexception,我已经创建了自己的configsection,但我已经陷入了死胡同。我不断得到一个空引用异常。我已经使用以下命令创建了自己的configsection 很明显,有些东西什么都不是,但我看不见/找不到它是什么。由于我在调试知识上的巨大漏洞,我无法进一步进行调试。有人能指出我到底做错了什么吗 App.Config w我的自定义节数据库连接: <configuration> <configSections> <section name="DatabaseCon

我已经创建了自己的configsection,但我已经陷入了死胡同。我不断得到一个空引用异常。我已经使用以下命令创建了自己的configsection

很明显,有些东西什么都不是,但我看不见/找不到它是什么。由于我在调试知识上的巨大漏洞,我无法进一步进行调试。有人能指出我到底做错了什么吗

App.Config w我的自定义节数据库连接:

<configuration>
  <configSections>
    <section name="DatabaseConnections" type="TaskDatabase.Common.ConfigurationSections.ConnectionstringsConfigSection,TaskDatabase.Common"/>
  </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
<DatabaseConnections>
   <Connectionstrings>
     <add ConnName="TaskDatabase" ConnString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=&quot;C:\...\TaskDB.accdb&quot;"></add>
   </Connectionstrings>
</DatabaseConnections>
</configuration>
异常发生在返回nullReference的base[ConnectionStringsCollectionName]处。我一步也进不去,所以我被卡住了。有人能告诉我我做错了什么,或者我如何进一步调试它吗

堆栈跟踪:

  bij System.Configuration.ConfigurationElement.get_Item(String propertyName)
   bij TaskDatabase.Common.ConfigurationSections.ConnectionstringsConfigSection.get_ConnectionStrings() in ....
ConnectionStringCollection-类

public class ConnectionStringsCollection : ConfigurationElementCollection
{
    public ConnectionString this[int index]
    {
        get
        {
            return base.BaseGet(index) as ConnectionString;
        }
        set
        {
            if (base.BaseGet(index) != null)
            {
                base.BaseRemoveAt(index);
            }
            this.BaseAdd(index, value);
        }
    }

    public new ConnectionString this[string responseString]
    {
        get { return (ConnectionString)BaseGet(responseString); }
        set
        {
            if (BaseGet(responseString) != null)
            {
                BaseRemoveAt(BaseIndexOf(BaseGet(responseString)));
            }
            BaseAdd(value);
        }
    }

    protected override System.Configuration.ConfigurationElement CreateNewElement()
    {
        return new ConnectionString();
    }

    protected override object GetElementKey(System.Configuration.ConfigurationElement element)
    {
        return ((ConnectionString)element).NameProp;
    }
}
配置元素:

//ConfigurationElement
public class ConnectionString : ConfigurationElement
{
    [ConfigurationProperty("ConnName", IsRequired = true)]
    public string NameProp
    {
        get
        {
            return this["ConnName"] as string;
        }
    }
    [ConfigurationProperty("ConnString", IsRequired = true)]
    public string ConnectionstringProp
    {
        get
        {
            return this["ConnString"] as string;
        }
    }
}
有人能发现我犯的错误吗

谢谢您的时间。

请检查以下内容:

您的连接字符串包含以下内容:

C:\Users\Stijn\Documents\visualstudio 2012\Projects\TaskDatabase\TaskDatabase\TaskDB.accdb"

在连接字符串的开头和结尾检查

试着移除这个,也许你从另一个地方复制了这个部分


我希望这会有所帮助

也许你有一个很好的理由,但是.NET应用程序和web配置文件中已经内置了一个部分。为您的项目创建一个设置文件,并添加一个带有连接字符串类型的设置,您将看到我所说的内容。刚刚测试了它。并将该节重命名为:ConnectionString tot MyConnStrings,但仍然存在相同的问题。不要重命名该节。我的意思是,您不需要任何自定义配置部分,因为您可以只使用已经提供给您的配置。添加连接字符串类型的设置后,可以直接通过Properties.Settings.Default.YourSettingName.Using预定义部分访问它,我仅限于3个属性:name、connectionstring、provider。但是当我需要更多的时候,需求就会出现。你不必使用。。。对话框中创建连接字符串时,可以在值字段中键入所需的任何内容。或者简单地使用字符串类型的属性。关键是已经有一种方法可以通过编程高效地访问属性,而无需构建自定义配置节。您可以将字符串加载到System.Data.Common.DbConnectionStringBuilder中以解析出元素。引号是经过编码的,不会影响任何内容,并且它们可能是连接字符串所必需的,因为.accdb文件的路径包含空格。
//ConfigurationElement
public class ConnectionString : ConfigurationElement
{
    [ConfigurationProperty("ConnName", IsRequired = true)]
    public string NameProp
    {
        get
        {
            return this["ConnName"] as string;
        }
    }
    [ConfigurationProperty("ConnString", IsRequired = true)]
    public string ConnectionstringProp
    {
        get
        {
            return this["ConnString"] as string;
        }
    }
}