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