2016-01-15 60 views
0

我已經創建了用於顯示和呈現從SQLServer到pdf/doc/xls的報表的應用程序。因爲我需要在運行時更改ConnectionString,所以我要求用戶在運行時輸入值。因此,經過幾個小時搜索數千個網站,我發現了不同的解決方案,但它們都不適合我。在C#應用程序中更改SQL Server的ConnectionString

我將連接更改爲我的一種方法,如下所示。

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.ConnectionStrings.ConnectionStrings.Remove("MapSoftRPTConnectionString"); 
config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings("MapSoftRPTConnectionString", Parameters.ConnectionString())); 
config.Save(ConfigurationSaveMode.Modified, true); 
ConfigurationManager.RefreshSection("connectionStrings"); 

我有默認字符串,並與它,所有在我的機器上正常工作。當我(作爲用戶)故意插入錯誤的值時,它仍然有效。所以,它不會考慮我的變化。

這是怎麼回事?

編輯:

我不需要將其保存到配置,但所有我要的是使用戶能夠在運行時創建報表時更改服務器和帳號。即知道實現過程如下:

// ......... 
// get parameters from user input and store them in variables 

// then change connection string 
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.ConnectionStrings.ConnectionStrings["MapSoftRPT.Properties.Settings.MapSoftRPTConnectionString"].ConnectionString = @Parameters.ConnectionString(); 
config.Save(ConfigurationSaveMode.Modified); 

// then start rendering report 
this.reportViewer1.Reset(); 
this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local; 

this.reportViewer1.LocalReport.ReportPath = AppDomain.CurrentDomain.BaseDirectory + "\\" + Parameters.getReportRDLCName(repType); 
this.reportViewer1.LocalReport.DataSources.Clear(); 
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource(Parameters.getReportDataSource(repType), Parameters.getReportDataTable(repType))); 

bytes = reportViewer1.LocalReport.Render("PDF"); // and send it to FileStream... 
+0

使用ConnectionStringBuilder並將字符串傳遞給Connection構造函數。或者,將運行時生成的值保存到配置文件中很重要? – Jodrell

+1

我明白你想要做什麼;爲什麼不能將所有可能的連接字符串定義爲一個列表,並向用戶提供一個下拉列表來選擇它?很容易將選定的值傳遞給連接對象,而不是動態地嘗試更改配置文件 – techspider

+0

@Jodrell編輯我的問題 – Aleksandar

回答

0

我不知道是否有你需要將它保存到config.connection串的具體原因,但如果不是......你嘗試過,

string Connstr =「Data Source =」+ SelectedIP +「; Initial Catalog =」+ dbName +「; User ID =」+ txtUsername.Text +「; Password =」+ txtPassword.Text +「」;

如果需要全球化,您可以創建一個公共課程。

+0

編輯我的問題 – Aleksandar

相關問題