如何在 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.
}