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