我是使用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。但是打开不在方法列表中。
答案 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;
}
这是通过提供者/连接字符串创建连接的一般方法,如您的情况。