从c#中的app配置文件中获取连接字符串

时间:2011-12-23 05:30:42

标签: c# visual-studio-2010 app-config

我在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"];

9 个答案:

答案 0 :(得分:10)

首先,您必须添加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"];

答案 1 :(得分:6)

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

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

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

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

答案 2 :(得分:1)

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

如果应用程序名称长于8.3名称(例如GreatStuff.exe),则可能使用其简短的8.3等效名称(在我的示例中为GREATS~1.EXE)启动,然后.NET将查找只需将app.config附加到短名称即可.config个文件。这将失败。

答案 3 :(得分:1)

在VS 2013中编译WinForm应用程序时我注意到了一件事:

我添加连接字符串我的设置文件 - 更新我的app.config文件

我期待的时候:

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

我必须写:

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

其他一切照旧

答案 4 :(得分:1)

我这样做是为了获取我的连接字符串“OracleDbContext”......

ConfigurationManager.ConnectionStrings["OracleDbContext"].ConnectionString;

我的web.config看起来像:

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

答案 5 :(得分:0)

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

以上配置是否适用于以下API /代码:

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

答案 6 :(得分:0)

第一种语法绝对有效。

可能的原因是配置文件未在应用程序中正确加载。我想确保它是什么类型的项目。如果是WinForm应用程序或控制台应用程序,则需要在app.config中进行设置。它将被编译为.config并在启动应用程序时加载。如果它是Web应用程序,我担心您无法将该节点添加到app.config,因为它不会被加载。你需要把它放在web.config中。此外,如果要将配置文件中的设置与.net库(DLL)放在一起,则无论如何都不会加载配置文件。配置文件仅遵循主应用程序。

答案 7 :(得分:0)

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

其他问题:尝试使用项目属性对话框修改连接字符串,并将“project.My.Mysettings。”添加到连接字符串名称。这导致失败。

答案 8 :(得分:0)

还有另一种方法可以为控制台应用程序执行此操作:

    <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();