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

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

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

797599 次浏览

你有没有试过:

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

你可以这样做:

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

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

还要检查是否在引用下包含了System.Configuration dll。没有它,你将无法访问系统中的ConfigurationManager类。配置名称空间。

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

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

由于这是一个非常常见的问题,我准备了一些Visual Studio的屏幕截图,让它更容易遵循4个简单的步骤。

get connection string from app.config

string str = Properties.Settings.Default.myConnectionString;

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

using System; using System.Configuration;


var connectionString=ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
这里有一个参考: App.config中的连接字符串 < / p >

似乎问题不在于引用,你得到的connectionstring为空,所以请确保你已经将该值添加到配置文件中,你正在运行的项目意味着首先启动/执行的主程序/库。

首先在页面中添加System.Configuration的引用。

using System.Configuration;

然后根据你的app.config得到连接字符串如下。

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

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

试试这个

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

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

. IDE未创建文件

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

在这种情况下,代码实际上是试图访问可执行文件的App.Config,而不是dll。因为没有找到名称,所以返回Null,因此出现了异常。

下面的帖子可能会有帮助: DLL的app.config中的ConnectionString为空 < / p >

这招对我很管用:

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

输出:

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

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

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

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

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

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

.

.

.

.

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

using System;
using System.Configuration;


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

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

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

上面的答案没有详细说明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

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

经过一些研究,似乎ConfigurationManager.ConnectionStrings将为空,而试图从DesignTime访问它。

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

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


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