【问题标题】:Get connection string from App.config从 App.config 获取连接字符串
【发布时间】:2011-09-26 01:47:34
【问题描述】:
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>

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

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

【问题讨论】:

  • 你把 App.config 放在哪里了?您正在运行的应用程序项目还是某些 dll?你首先需要
  • 添加对System.Configuration.dll的引用,应该可以使用System.Configuration.ConfigurationManager了。
  • 您的连接字符串有错字。您需要在“集成”和“安全”之间留一个空格
  • @OnurOmer - 问题已更新为包含空格(“Integrated Security”而不是“IntegratedSecurity”)

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


【解决方案1】:

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;
        }
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:
            //Get Connection from web.config file
            public static OdbcConnection getConnection()
            {
                OdbcConnection con = new OdbcConnection();
                con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["con"].ConnectionString;
                return con;     
            }
            

            【讨论】:

              【解决方案7】:

              这对我有用:

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

              输出:

              数据源=.;初始目录=OmidPayamak;IntegratedSecurity=True"

              【讨论】:

                【解决方案8】:

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

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

                【讨论】:

                  【解决方案9】:

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

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

                  【讨论】:

                    【解决方案10】:

                    你不能只做以下事情吗:

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

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

                    【讨论】:

                    • 我知道这是一个 C# 问题,但由于这是 google 搜索结果的顶部,要在 VB 中执行此操作,对于我们这些必须维护 VB 代码的人来说,它是 System.Configuration.ConfigurationManager.ConnectionStrings("Test").ConnectionString
                    【解决方案11】:

                    你试过了吗:

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

                    【讨论】:

                      【解决方案12】:

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

                      【讨论】:

                        【解决方案13】:

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

                        【讨论】:

                          【解决方案14】:

                          试试这个

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

                          【讨论】:

                            【解决方案15】:

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

                            using System.Configuration;
                            

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

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

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

                            【讨论】:

                              【解决方案16】:
                              string str = Properties.Settings.Default.myConnectionString; 
                              

                              【讨论】:

                              • 如果 app.config 被添加为项目的链接会怎样?
                              • 这仅在您的连接字符串是应用程序设置时才有效,如果从 app.config 检索 &lt;connectionStrings&gt; 元素(这是 OP 所要求的!),它将不起作用。跨度>
                              【解决方案17】:

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

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

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

                              【讨论】:

                                【解决方案18】:

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

                                【讨论】:

                                • 喜欢这个答案。默认情况下,在我的 VS(VS2012 Ultimate)版本中,不包含此库,但 using System.Configuration 仍然有效
                                • 我真的必须添加参考,否则使用没有下划线,但 ConfigurationManager 仍然未知。谢谢!
                                【解决方案19】:

                                似乎问题与参考无关,您将 connectionstring 设为 null,因此请确保您已将值添加到您正在运行的项目的配置文件中,这意味着首先启动/执行的主程序/库。

                                【讨论】:

                                  【解决方案20】:

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

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

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

                                  【讨论】:

                                  • 我和你说的一样,但是我得到了同样的空引用错误。
                                  【解决方案21】:
                                  string sTemp = System.Configuration.ConfigurationManager.ConnectionStrings["myDB In app.config"].ConnectionString;
                                  

                                  【讨论】:

                                    【解决方案22】:

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

                                    【讨论】:

                                      猜你喜欢
                                      • 1970-01-01
                                      • 2013-11-08
                                      • 2017-09-22
                                      • 2015-01-10
                                      • 2010-12-22
                                      • 2013-02-01
                                      • 2023-04-04
                                      • 2012-10-07
                                      相关资源
                                      最近更新 更多