[英]How to store connection string in WinForms application?
我有一個由兩種形式組成的應用程序。 一個表單顯示從數據庫返回的數據字段,另一個表單打開一個窗口,允許用戶選擇從哪個數據庫獲取數據。
目前,應用程序不存儲用戶對數據庫的選擇。 我希望每次用戶選擇要在form2中使用的數據庫時,存儲當前所選連接字符串的內容。
做這個的最好方式是什么? 如果我創建了一個靜態類對象的實例來存儲這些信息,那么是否會保留數據以便在每個表單上使用?
你應該有一個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>
雖然有內置的.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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.