从c#的appconfig文件中获取连接字符串

本文关键字:获取 连接 字符串 文件 appconfig | 更新日期: 2023-09-27 18:18:50

我在app.config文件中声明了以下连接字符串:

  <connectionStrings>
    <add name="SqlConnectionString" connectionString="Data Source=xxx.xx.xx.xx;Initial Catalog=xxxxx;User Id=xx;Password=xxx;" providerName="System.Data.SqlClient" />
  </connectionStrings>

当我尝试使用以下c#代码片段获取此连接字符串时,我得到值null。我无法获得连接字符串。语法有什么问题吗?

第一次尝试:

var settings = ConfigurationManager.ConnectionStrings["SqlConnectionString"];
string result = settings.ConnectionString;

第二次尝试:

string result = ConfigurationSettings.AppSettings["SqlConnectionString"];

从c#的appconfig文件中获取连接字符串

首先,您必须添加appSettings标签

 <connectionStrings>
    <appSettings>
      <add name="SqlConnectionString" connectionString="Data Source=xxx.xx.xx.xx;Initial Catalog=xxxxx;User Id=xx;Password=xxx;" providerName="System.Data.SqlClient" />
    </appSettings>
  </connectionStrings>

第二,在项目中添加System.Configuration的引用,并在源代码中插入using System.Configuration

然后,您可以使用ConfigurationManager.AppSettings访问您的配置设置:

string result = ConfigurationSettings.AppSettings["SqlConnectionString"];

对于非web项目,并且在OP中设置了app.config,这是我通常做的,因为配置文件在应用程序编译时更改了名称(到您的app.exe.config):

    public static Configuration ExeConfig()
    {
        Assembly service = Assembly.GetAssembly(typeof(YourClass));
        return ConfigurationManager.OpenExeConfiguration(service.Location);
    }

然后引用第s个连接字符串:

ExeConfig().ConnectionStrings.ConnectionStrings[s].ConnectionString

我也有同样的问题,但经过大量研究,我发现代码抛出空引用异常的原因是因为如果您使用connectionString名称,它将返回null,当您尝试调用ToString()ConfigurationManager的connectionString属性时。ConnectionStrings属性当异常被抛出时,所以到
如果要返回正确的连接字符串,则必须使用以下代码索引ConnectionStringSettings。

ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings[/* index */];
string conString = conSettings.ConnectionString;

我这样做是为了得到我的连接字符串"OracleDbContext"…

ConfigurationManager.ConnectionStrings["OracleDbContext"].ConnectionString;

我的网页。配置如下:

  <connectionStrings>
    <add name="OracleDbContext" 
         providerName="Oracle.ManagedDataAccess.Client" 
         connectionString="User Id=oracle_user;              
                           Password=oracle_user_password;
                           Data Source=oracle" />
  </connectionStrings>

在VS 2013中编译WinForm App时,我注意到一件事:

我添加连接字符串我的设置文件-更新我的应用程序配置文件

当我期望:

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

我不得不写:

var connectionString = ConfigurationManager.ConnectionStrings["MyAppNameSpace.Properties.Settings.theConnectionStringName"].ConnectionString;

一切正常

<configuration>
  <appSettings>
   <add key="ConnectionString" value="blah blah blah"/>  </appSettings>
  </configuration>

上面的配置是否能与API/代码一起工作?

string str = ConfigurationSettings.AppSettings["SqlConnectionString"];

第一种语法肯定是有效的。

可能原因是应用程序中没有正确加载配置文件。我想确定这是什么类型的项目。如果是WinForm应用程序或Console应用程序,则需要在app.config中设置。它将被编译为.config,并在应用程序启动时加载。如果它是一个Web应用程序,恐怕您不能将节点添加到app.config中,因为它不会被加载。你需要把它放到web.config中。此外,如果您想将设置放在带有。net库(DLL)的配置文件中,则无论如何都不会加载配置文件。配置文件将只跟随主应用程序。

另一个可能导致失败的原因是。net框架不正确的名称解析。

如果应用程序名称比8.3名称长(例如GreatStuff.exe),它可能会使用它的8.3等效的短名称(在我的示例中是GREATS~1.EXE)启动,然后。net将通过简单地将.config附加到短名称来查找app.config文件。这将会失败

同样的问题。根据Merlyn Morgan-Graham和Edward Zhu的评论,我重新构建了我的项目,它使用app.config创建了一个带有连接字符串的myapp.exe.config文件。原来的第一个语法然后工作。

其他问题:尝试使用项目属性对话框修改连接字符串,它添加了"project. my . mysettings"。到连接字符串名称。

对于控制台应用程序还有另一种方法:

    <configuration>
  <appSettings>
    <add key="SqlConString" value="some connection string"/>
  </appSettings>

读取

using System.Configuration;

,然后使用

string CONSTRING;
AppSettingsReader ap = new AppSettingsReader();
CONSTRING = ap.GetValue("SqlConString",typeof(string)).ToString();