2014-02-26 68 views
0

我正在開發窗口應用程序,我希望應用程序的用戶可以更改連接字符串,所以我創建一個表單來保存連接字符串設置並能夠檢索它,但問題是如何使用這個設置如何使用檢索和使用設置值連接到adatabase

private void button1_Click(object sender, EventArgs e) 
{ 
    var serv = Properties.Settings.Default.server; 
    var db = Properties.Settings.Default.database; 
    var userid = Properties.Settings.Default.userid; 
    var pass = Properties.Settings.Default.password; 

    SqlConnection conn = new SqlConnection("Data Source=serv;Initial Catalog=db;User ID=userid password=pass"); 
    SqlDataAdapter sda = new SqlDataAdapter("SELECT count(*) FROM users WHERE username='" + txtUsername.Text + "' and password='" + txtPassword.Text + "'", conn); 
} 

回答

0

嘗試

SqlConnection conn = new SqlConnection("Data Source=" + serv.ToString() + ";Initial Catalog=" + db.ToString() + ";User ID=" + userid.ToString() + ";password= " + pass.ToString()); 
0

你可以從你的代碼段看到,連接字符串值只是一個string要傳遞到SqlConnection構造,所以你的情況你c應該在運行時拉取該值並動態加載該值。

雖然有可能操縱app.config文件,它確實保存連接字符串值,我通常更喜歡操縱輔助文件。例如,更好的選擇是使用XML中的輔助文件,並在您的用戶更改其連接字符串時對其執行CRUD操作。在運行時,可以像上面那樣抽取特定的連接字符串值並將其加載到構造函數中。示例XML結構可能如下:

<connections> 
    <connection userID="12345">Data Source=servA;Initial Catalog=db123;User ID=jSmith password=pass1</connection> 
    <connection userID="43532">Data Source=servB;Initial Catalog=db456;User ID=rJSmith password=abc321</connection> 
</connections> 

如果一切正在改變是用戶,傳遞,目錄和數據源值和連接字符串是靜態的,你可能只是這些單個的值存儲爲剩餘與整個連接字符串相反,然後動態注入它們以在運行時建立連接字符串。

使用類似LINQ to XML的東西時,讀取XML並不困難,它允許您查詢XML文件並通過userID字段獲取特定的連接字符串。 LINQ to XML的一個很好的參考如下:http://msdn.microsoft.com/en-us/library/bb387098.aspx

2

把你的連接字符串放在App.config/Web.config中,如果需要的話可以稍後改變它。

還請記住,一般使用SqlConnection時總是使用using聲明。

例如:

App.config/Web.config添加以下內容:

<appSettings> 
    <add key="myConnectionString" value="Data Source=serv;Initial Catalog=db;User ID=userid password=pass" /> 
</appSettings> 

然後你就可以輕鬆地在任何地方訪問它在您的項目:

using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["myConnectionString"])) 
{ 
    using(SqlCommand sqlCommandConn = new SqlCommand(InsertStatement)) 
    { 
    sqlCommandConn.Connection = conn; 
    //TODO: Open connection, Execute queries... 
    } 
} 

注意

如果您願意,您還可以通過代碼更改這些設置:

private void UpdateConfig(string key, string value) 
    { 
     var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     configFile.AppSettings.Settings[key].Value = value; 

     configFile.Save(); 
    }