从App.config获取连接字符串


380
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>

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

你调用的对象是空的。


5
您将App.config放在哪里?您正在运行的应用程序项目或某些dll?首先,您需要
abatishchev

3
添加对System.Configuration.dll的引用,您应该能够使用System.Configuration.ConfigurationManager。
daszarrin

您的连接字符串有错字。您需要在“集成”和“安全”之间

@OnurOmer-问题已更新为包括空格(“ Integrated Security”而不是“ IntegratedSecurity”)
SlimsGhost

Answers:


484

您不能仅执行以下操作:

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

您的程序集也需要参考 System.Configuration.dll


14
我知道这是一个C#问题,但是由于这是Google搜索结果的顶部,因此要在VB中执行此操作,这是System.Configuration.ConfigurationManager.ConnectionStrings("Test").ConnectionString针对那些我们必须维护VB代码的人
JFA

296

由于这是一个非常常见的问题,因此我准备了Visual Studio的一些屏幕截图,以使您可以轻松地按照4个简单步骤进行操作。

从app.config获取连接字符串


22
喜欢这个答案。在我的VS(VS2012 Ultimate)版本中,默认情况下不包含该库,但using System.Configuration仍可以使用
David Colwell 2013年

3
我真的很想添加参考,或者使用中没有下划线,但是ConfigurationManager仍然未知。谢谢!
CodingYourLife

33
string str = Properties.Settings.Default.myConnectionString; 

1
如果将app.config添加为项目链接怎么办?
FrenkyB 2015年

2
仅当您的连接字符串是应用程序设置时,此方法才有效;如果<connectionStrings>要从app.config中检索元素(OP所要求的!),则此方法将不起作用。
BrainSlugs83 '18

31

还要检查System.Configuration您的引用中是否包含了dll。没有它,您将无法访问ConfigurationManagerSystem.Configuration命名空间中的类。


22

首先,将的引用添加System.Configuration到您的页面。

using System.Configuration;

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

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

就是这样,现在您已经有了连接字符串,就可以使用它了。


16
//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

试试看

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

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的,但逻辑是相同的。


3

你有没有尝试过:

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

3

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

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


3

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

using System; 
using System.Configuration;

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

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

2

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

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

2

这为我工作:

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

输出:

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


1

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

using System; using System.Configuration;

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

这是参考: App.config中的连接字符串


2
我做了与您说的相同的操作,但是得到了相同的空引用错误。
神秘思维

1

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


1

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

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

以下帖子可能会有所帮助: DLL的app.config中的ConnectionString为空


0

我引用了System.Configuration库,并且遇到相同的错误。调试文件没有其app.config,请手动创建此文件。错误是,我解决了此问题,将文件“ appname.exe.config”复制到了调试文件夹中。IDE未创建文件。


0

我通过使用索引读取字符串并逐一检查来解决了这个问题。使用名称读取仍然会出现相同的错误。
开发C#窗口应用程序时出现问题,asp.net应用程序中没有问题。设置中一定有不正确的地方。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.