var connection = ConnectionFactory.GetConnection(
    ConfigurationManager.ConnectionStrings["Test"]
    .ConnectionString, DataBaseProvider);

这是我的app。config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="Test" connectionString="Data Source=.;Initial Catalog=OmidPayamak;Integrated Security=True" providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

但是当我的项目运行时,这是我的错误:

对象引用未设置为对象的实例。


当前回答

放置ConfigurationManager时遇到此问题。在UserControl的构造函数中的ConnectionStrings,这里没有一个解决方案对我有效。

经过一些研究,看起来像ConfigurationManager。ConnectionStrings将为空,而试图从设计时间访问它。

从这篇文章中,我想出了下面的代码来检测DesignTime,作为解决问题的方法:

public class MyUserControl : UserControl 
{
    ....
    public MyUserControl ()
    {
        InitializeComponent();

        bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
        if (!designMode)
        {
            this.connectionString = 
                ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
        }
    }
}

其他回答

我通过使用索引读取字符串并逐个检查来解决这个问题。使用名称进行读取仍然会给出相同的错误。 我有一个问题,当我开发一个c#窗口应用程序,我没有在我的asp.net应用程序的问题。一定有什么地方不太对劲。

这招对我很管用:

string connection = System.Configuration.ConfigurationManager.ConnectionStrings["Test"].ConnectionString;

输出:

数据源=.;初始目录=OmidPayamak;集成安全性=True"

首先添加System的引用。配置到页面。

using System.Configuration;

然后根据你的app.config获取连接字符串,如下所示。

string conStr = ConfigurationManager.ConnectionStrings["Test"].ToString();

现在你已经有了连接字符串,可以使用它了。

为了从app.cfg(在windows服务应用程序中)读取连接字符串,下面的代码对我有用

 var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
    connectionStringsSection.ConnectionStrings["CONNECTIONSTR"].ConnectionString = @"New Connection String";

我也有同样的问题。我的解决方案是由两个项目组成的。一个类库和一个引用类库项目的网站。问题是,我试图在我的类库项目中访问App.config,但系统正在Web中搜索。网站配置。我把连接字符串放在Web中。配置和…问题解决了!

主要原因是,尽管ConfigurationManager在另一个程序集中使用,但它正在运行的项目中进行搜索。