从App.config获取连接字符串

443
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
您的连接字符串有一个错别字。在“Integrated”和“Security”之间需要加一个空格。 - Onur Omer
@OnurOmer - 问题已更新,包括空格("Integrated Security" 而不是 "IntegratedSecurity") - SlimsGhost
22个回答

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

当您需要使用连接时,请在表单中执行以下操作:

 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
我有同样的问题。我的解决方案来自两个项目:一个“类库”和一个引用该类库项目的网站。问题在于,我试图在我的“类库”项目中访问“App.config”,但系统在查找网站的“Web.config”时出现了问题。我将连接字符串放在了“Web.config”中,问题得以解决!
主要原因是,尽管在另一个程序集中使用了“ConfigurationManager”,但它仍在搜索运行项目中的内容。

3

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

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

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


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

2

看起来问题不在引用方面,你得到的连接字符串为null,请确保已将该值添加到配置文件中,即运行项目的主程序/库,也就是首先启动/执行的程序/库。


2
您可以使用此方法获取连接字符串。
using System; 
using System.Configuration;

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

2

首先您需要在项目中添加System.Configuration的引用,然后使用以下代码获取连接字符串。

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

1

在将ConfigurationManager.ConnectionStrings放置在UserControl的构造函数中时遇到了此问题,而这里的解决方案都无法解决我的问题。

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

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

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

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


1
为了从app.cfg(在Windows服务应用程序中)读取连接字符串,下面的代码对我有用
 var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
    connectionStringsSection.ConnectionStrings["CONNECTIONSTR"].ConnectionString = @"New Connection String";

1
您可以使用以下代码行获取连接字符串 -
using System; using System.Configuration;

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

这里有一个参考资料: 从App.config中获取连接字符串


2
我按照你说的做了,但是还是出现了同样的空引用错误。 - Amit Sinha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接