从App.config获取连接字符串

时间:2011-06-30 14:54:06

标签: c# ado.net exception-handling connection-string app-config

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>

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

  

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

22 个答案:

答案 0 :(得分:450)

你不能只做以下事情:

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

您的程序集还需要引用System.Configuration.dll

答案 1 :(得分:278)

由于这是一个非常常见的问题,我已经从Visual Studio准备了一些屏幕截图,以便通过4个简单步骤轻松完成。

get connection string from app.config

答案 2 :(得分:32)

string str = Properties.Settings.Default.myConnectionString; 

答案 3 :(得分:28)

同时检查您的参考文件中是否包含System.Configuration dll。没有它,您将无法访问System.Configuration命名空间中的ConfigurationManager类。

答案 4 :(得分:20)

首先在您的信息页中添加System.Configuration的引用。

using System.Configuration;

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

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

现在就是你手中的连接字符串,你可以使用它。

答案 5 :(得分:13)

//Get Connection from web.config file
public static OdbcConnection getConnection()
{
    OdbcConnection con = new OdbcConnection();
    con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["con"].ConnectionString;
    return con;     
}

答案 6 :(得分:6)

试试这个

string abc = ConfigurationManager.ConnectionStrings["CharityManagement"].ConnectionString;

答案 7 :(得分:3)

1)创建一个新表单并添加:

Imports System.Configuration
Imports Operaciones.My.MySettings

Public NotInheritable Class frmconexion

    Private Shared _cnx As String
    Public Shared Property ConexionMySQL() As String
        Get
            Return My.MySettings.Default.conexionbd
        End Get
        Private Set(ByVal value As String)
            _cnx = value
        End Set
    End Property

End Class

然后当你想使用连接时,请以ur形式执行此操作:

 Private Sub frmInsert_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim cn As New MySqlConnection(frmconexion.ConexionMySQL)
cn.open()

就是这样。您将连接到数据库并可以执行操作。

这是针对vb.net的,但逻辑是一样的。

答案 8 :(得分:3)

你试过了吗?

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

答案 9 :(得分:3)

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

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

答案 10 :(得分:3)

您可以使用此方法获取连接字符串

using System; 
using System.Configuration;

private string GetConnectionString()
{
    return ConfigurationManager.ConnectionStrings["MyContext"].ConnectionString;
}

答案 11 :(得分:2)

string sTemp = System.Configuration.ConfigurationManager.ConnectionStrings["myDB In app.config"].ConnectionString;

答案 12 :(得分:1)

您可以使用以下代码行获取连接字符串 -

using System; using System.Configuration;

var connectionString=ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

这是一个参考: Connection String from App.config

答案 13 :(得分:1)

似乎问题不在于引用,您将connectionstring作为null,因此请确保您已将值添加到配置文件中,正在运行的项目意味着首先启动/执行的主程序/库。

答案 14 :(得分:1)

此问题中的OP可能正在尝试在dll中使用App.Config。

在这种情况下,代码实际上是试图访问可执行文件的App.Config而不是dll。由于找不到名称,因此返回Null,因此显示异常。

以下帖子可能会有所帮助: ConnectionString from app.config of a DLL is null

答案 15 :(得分:1)

这对我有用:

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

输出:

  

数据源=。;初始目录= OmidPayamak; IntegratedSecurity = True&#34;

答案 16 :(得分:1)

首先,您必须向项目添加System.Configuration引用,然后使用下面的代码来获取连接字符串。

_connectionString = ConfigurationManager.ConnectionStrings["MYSQLConnection"].ConnectionString.ToString();

答案 17 :(得分:1)

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

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

答案 18 :(得分:0)

我引用了System.Configuration库,我有同样的错误。 调试文件没有他们的app.config,手动创建此文件。 错误是,我解决了这个复制调试文件夹中的文件“appname.exe.config”。 IDE没有创建文件。

答案 19 :(得分:0)

我通过使用索引来读取字符串并逐个检查来解决了这个问题。使用该名称阅读仍然会出现同样的错误 我在开发C#窗口应用程序时遇到问题,我的asp.net应用程序中没有问题。设置中必须有一些不正确的东西。

答案 20 :(得分:0)

上面的答案没有详细说明从哪里 connectionStrings 索引中的值来自。

如上所述,要获取连接字符串,您可以说:

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

要使用正确的 XXX 值,请转到您的主项目 web.config 文件并查找以下代码:

<connectionStrings>
    <add name="Authentication" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=Authentication;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Authentication.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>

它说 name= 的地方,这些引号内的文本是您在上面的代码中使用的 XXX 的值。在我上面的例子中,它恰好是 Authentication

答案 21 :(得分:0)

UserControl 的构造函数中放置 ConfigurationManager.ConnectionStrings 时遇到了这个问题,这里的任何解决方案都不适合我。

经过一些研究,似乎 ConfigurationManager.ConnectionStrings 在尝试从 DesignTime 访问时为空。

this post 开始,我想出了以下代码来检测 DesignTime 作为问题的解决方法:

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

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