Я создал приложение для отображения и рендеринга отчетов с SQLServer в pdf / doc / xls. Поскольку мне нужно изменить 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...