如何在WinForms应用程序中存储连接字符串

本文关键字:存储 连接 字符串 应用程序 WinForms | 更新日期: 2023-09-27 18:29:46

我有一个由两个表单组成的应用程序。一个表单在字段中显示从数据库返回的数据,另一个表单打开一个窗口,允许用户选择从哪个数据库获取数据。

目前,应用程序不存储用户选择的数据库。每当用户在form2中选择要使用的数据库时,我想存储当前选择的连接字符串是什么。

最好的方法是什么?如果我创建了一个静态类的对象实例来存储这些信息,这会持久化数据以用于每个表单吗?

如何在WinForms应用程序中存储连接字符串

您应该有一个app.config配置文件,并在其中定义一个<connectionStrings>部分:

<configuration>
   <connectionStrings>
       <add name="YourNameHere" 
            connectionString="server=.;database=AdventureWorks;Integrated Security=SSPI"/>
   </connectionStrings>
</configuration>

然后,您可以在项目中添加对System.Configuration的引用,然后可以轻松地检索这些连接字符串:

string connStr = ConfigurationManager.ConnectionStrings["YourNameHere"].ConnectionString;
using(SqlConnection connection = new SqlConnection(connStr))
{
   // do something here....
}

您可以将连接字符串存储在App.config中,并像这样检索:

string connStr = ConfigurationSettings.AppSettings["ConnectionString"];
public SqlConnection conn = new SqlConnection(connStr);

示例App.config:

<?xml version="1.0" encoding="utf-8" ?>    
<configuration>    
    <configSections>    
    </configSections>    
<connectionStrings>    
    <add name="ConnectionString" connectionString="Data Source=./SQLEXPRESS;Initial Catalog=DB;Integrated Security=SSPI;" providerName="Microsoft.SqlClient" />    
 </connectionStrings>    
</configuration>

我很想为此目的使用应用程序设置。

http://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

这是一个建议保存连接字符串的地方:-)

尽管有内置的.NET功能来存储与用户相关的信息(通过注册表、配置文件、设置等),但它们似乎太重了。

我建议使用纯文本文件并将其保存在用户文件夹中:

var userPath = Environment.GetFolderPath(Environment
                                             .SpecialFolder.ApplicationData);
var filename = Path.Combine(userPath, "mysettings");
// Read connection string
var connectionString = File.ReadAllText(filename);
// Write connection string
File.WriteAllText(filename, connectionString);

还要注意的是,用户在处理连接字符串时几乎不会有乐趣。他们更喜欢使用单独的表单字段指定数据库名称、服务器、用户名等。要将这些字段映射到连接字符串,可以使用SqlConnectionStringBuilder类(如果使用MSSQL Server):

// to connection string
var connectionStringBuilder1 = new SqlConnectionStringBuilder();
connectionStringBuilder1.DataSource = "server";
connectionStringBuilder1.InitialCatalog = "database";
var connectionString = connectionStringBuilder1.ConnectionString;
// from connection string
var connectionStringBuilder2 = new SqlConnectionStringBuilder(connectionString);
var serverName = connectionStringBuilder2.DataSource;
var databaseName = connectionStringBuilder2.InitialCatalog;