我已經創建了用於顯示和呈現從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...
使用ConnectionStringBuilder並將字符串傳遞給Connection構造函數。或者,將運行時生成的值保存到配置文件中很重要? – Jodrell
我明白你想要做什麼;爲什麼不能將所有可能的連接字符串定義爲一個列表,並向用戶提供一個下拉列表來選擇它?很容易將選定的值傳遞給連接對象,而不是動態地嘗試更改配置文件 – techspider
@Jodrell編輯我的問題 – Aleksandar