如何在 C# 中从 app.config 文件中检索连接字符串后打开连接
how to open a connection after retrieving the connection string from an app.config file in C#
我是 app.config 文件的新手。我的连接字符串存储在我的 app.config 文件中,我可以检索连接字符串,但我不知道如何打开连接。我正在使用 app.config 来保护连接字符串,而不是将其存储在静态 class 中。我使用这种方法,因此我可以从一个位置将字符串从实时更改为测试。这是我的配置文件。 (我正在使用 postgresql)
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="LiveDB" providerName="Npsgql" connectionString="Server=ccmw;Port=5432;Database=Production_Tracking_Database;UserId=postgres;Password=;"/>
<add name="TestDB" providerName="Npsgql" connectionString="Server=ccmw;Port=5432;Database=PTS_Temp;UserId=postgres;Password=;"/>
</connectionStrings>
</configuration>
这就是我获取字符串的方式。
var connectionString = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;
之后我不确定如何打开连接,我尝试了connectionString。但是 open 不在方法列表中。
您可以使用以下代码:
static DbConnection CreateDbConnection(
string providerName, string connectionString)
{
// Assume failure.
DbConnection connection = null;
// Create the DbProviderFactory and DbConnection.
if (connectionString != null)
{
try
{
DbProviderFactory factory =
DbProviderFactories.GetFactory(providerName);
connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
}
catch (Exception ex)
{
// Set the connection to null if it was created.
if (connection != null)
{
connection = null;
}
Console.WriteLine(ex.Message);
}
}
// Return the connection.
return connection;
}
这是通过 provider/connection 字符串创建连接的通用方法,如您的情况。
一般来说,代码中的 "database connection" 将由某种连接对象表示。在大多数涉及 MS SQL 服务器的情况下,这是一个 SqlConnection
。然而,对于 Postgres,它是 a NpgsqlConnection
. You can create one by calling its constructor:
var connection = new NpgsqlConnection();
方便的是,构造函数重载之一接受连接字符串的字符串参数:
var connectionString = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;
var connection = new NpgsqlConnection(connectionString);
对于控制外部资源(如数据库连接)的对象,或任何真正实现 IDisposable
的对象,最好将其包装在 using
块中。 (这本质上是一个 try/finally
构造,它将适当地处理资源。)并且因为这个对象 does implement IDisposable
,你可以像这样使用它:
var connectionString = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;
using(var connection = new NpgsqlConnection(connectionString))
{
// use the connection in some way.
// presumably executing queries against it.
}
我是 app.config 文件的新手。我的连接字符串存储在我的 app.config 文件中,我可以检索连接字符串,但我不知道如何打开连接。我正在使用 app.config 来保护连接字符串,而不是将其存储在静态 class 中。我使用这种方法,因此我可以从一个位置将字符串从实时更改为测试。这是我的配置文件。 (我正在使用 postgresql)
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="LiveDB" providerName="Npsgql" connectionString="Server=ccmw;Port=5432;Database=Production_Tracking_Database;UserId=postgres;Password=;"/>
<add name="TestDB" providerName="Npsgql" connectionString="Server=ccmw;Port=5432;Database=PTS_Temp;UserId=postgres;Password=;"/>
</connectionStrings>
</configuration>
这就是我获取字符串的方式。
var connectionString = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;
之后我不确定如何打开连接,我尝试了connectionString。但是 open 不在方法列表中。
您可以使用以下代码:
static DbConnection CreateDbConnection(
string providerName, string connectionString)
{
// Assume failure.
DbConnection connection = null;
// Create the DbProviderFactory and DbConnection.
if (connectionString != null)
{
try
{
DbProviderFactory factory =
DbProviderFactories.GetFactory(providerName);
connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
}
catch (Exception ex)
{
// Set the connection to null if it was created.
if (connection != null)
{
connection = null;
}
Console.WriteLine(ex.Message);
}
}
// Return the connection.
return connection;
}
这是通过 provider/connection 字符串创建连接的通用方法,如您的情况。
一般来说,代码中的 "database connection" 将由某种连接对象表示。在大多数涉及 MS SQL 服务器的情况下,这是一个 SqlConnection
。然而,对于 Postgres,它是 a NpgsqlConnection
. You can create one by calling its constructor:
var connection = new NpgsqlConnection();
方便的是,构造函数重载之一接受连接字符串的字符串参数:
var connectionString = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;
var connection = new NpgsqlConnection(connectionString);
对于控制外部资源(如数据库连接)的对象,或任何真正实现 IDisposable
的对象,最好将其包装在 using
块中。 (这本质上是一个 try/finally
构造,它将适当地处理资源。)并且因为这个对象 does implement IDisposable
,你可以像这样使用它:
var connectionString = ConfigurationManager.ConnectionStrings["TestDB"].ConnectionString;
using(var connection = new NpgsqlConnection(connectionString))
{
// use the connection in some way.
// presumably executing queries against it.
}