从C#中的app.config文件中检索连接字符串后如何打开连接

时间:2015-02-02 15:29:35

标签: c# postgresql ado.net

我是使用app.config文件的新手。我的连接字符串存储在app.config文件中,我可以检索连接字符串,但我不知道如何打开连接。我使用app.config来保护连接字符串,而不是将其存储在静态类中。我使用这种方法,所以我可以从一个位置将字符串从live更改为test。这是我的配置文件。 (我正在使用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。但是打开不在方法列表中。

2 个答案:

答案 0 :(得分:3)

通常,代码中的“数据库连接”将由某种连接对象表示。在涉及MS SQL Server的大多数情况下,这是SqlConnection。然而,对于Postgres来说,它是a NpgsqlConnection。您可以致电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.
}

答案 1 :(得分:-2)

您可以使用以下代码:

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;
}

这是通过提供者/连接字符串创建连接的一般方法,如您的情况。