我有一个由两种形式组成的应用程序.一个表单显示从数据库返回的数据字段,另一个表单打开一个窗口,允许用户选择从哪个数据库获取数据.
目前,应用程序不存储用户对数据库的选择.我希望每次用户选择要在form2中使用的数据库时,存储当前所选连接字符串的内容.
做这个的最好方式是什么?如果我创建了一个静态类对象的实例来存储这些信息,那么是否会保留数据以便在每个表单上使用?
您可以存储连接字符串App.config并像这样检索它:
string connStr = ConfigurationSettings.AppSettings["ConnectionString"];
public SqlConnection conn = new SqlConnection(connStr);
Run Code Online (Sandbox Code Playgroud)
例子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>
Run Code Online (Sandbox Code Playgroud)
您应该有一个app.config配置文件,并在那里定义一个<connectionStrings>部分:
<configuration>
<connectionStrings>
<add name="YourNameHere"
connectionString="server=.;database=AdventureWorks;Integrated Security=SSPI"/>
</connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
然后System.Configuration,您可以添加对项目的引用,然后您可以轻松地检索这些连接字符串:
string connStr = ConfigurationManager.ConnectionStrings["YourNameHere"].ConnectionString;
using(SqlConnection connection = new SqlConnection(connStr))
{
// do something here....
}
Run Code Online (Sandbox Code Playgroud)
尽管有内置的 .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);
Run Code Online (Sandbox Code Playgroud)
另请注意,几乎用户不会享受使用连接字符串的乐趣。他们更喜欢使用单独的表单字段指定数据库名称、服务器、用户名等。要将这些字段映射到连接字符串,您可以使用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;
Run Code Online (Sandbox Code Playgroud)