powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / App.config
8 сообщений из 8, страница 1 из 1
App.config
    #37415057
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Мне необходимо написать код, котрый в конфигурации менял строку подключения к БД (SqlServerCe.3.5)
Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public bool ChangeDataSourceInConfigValue(string FileName)
        {
            try
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                EntityConnectionStringBuilder ECSB = new EntityConnectionStringBuilder(config.ConnectionStrings.ConnectionStrings["MyHomeFinanceEntities"].ConnectionString);
                DbConnectionStringBuilder CSB = new DbConnectionStringBuilder();
                CSB.Add("Data Source", FileName);
                ECSB.ProviderConnectionString = CSB.ConnectionString;
                config.Save();
                return true;
            }
            catch
            {
                return false;
            }
        }
Но по факту, при выполнении этой функции с подстановкой пути к несуществующему файлу БД, все равно приложение работает, отображает данные из первоначального файла БД. Это значит, что путь к новой БД в конфиге не изменился. Что я делаю не так?
...
Рейтинг: 0 / 0
App.config
    #37415059
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изменил код, конфиг стал меняться, но все равно данные берутся из первоначальной БД.
public bool ChangeDataSourceInConfigValue(string FileName)
{
try
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
EntityConnectionStringBuilder ECSB = new EntityConnectionStringBuilder(config.ConnectionStrings.ConnectionStrings["MyHomeFinanceEntities"].ConnectionString);
DbConnectionStringBuilder CSB = new DbConnectionStringBuilder();
CSB.Add("Data Source", FileName);
ECSB.ProviderConnectionString = CSB.ConnectionString;
config.ConnectionStrings.ConnectionStrings["MyHomeFinanceEntities"].ConnectionString = ECSB.ProviderConnectionString;
config.Save();
return true;
}
catch
{
return false;
}
}
...
Рейтинг: 0 / 0
App.config
    #37415065
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исправил все ошибки, файл переписывается, но путь к БД при создании ObjectContext не меняется, почему-то только при повторном запуске приложения.
...
Рейтинг: 0 / 0
App.config
    #37420062
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему решил следующим образом:
Конструкторы контекста:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    public partial class MyHomeFinanceEntities : ObjectContext
    {
        #region Конструкторы
    
        /// <summary>
        /// Инициализирует новый объект MyHomeFinanceEntities, используя строку соединения из раздела "MyHomeFinanceEntities" файла конфигурации приложения.
        /// </summary>
        public MyHomeFinanceEntities() : base("name=MyHomeFinanceEntities", "MyHomeFinanceEntities")
        {
            this.ContextOptions.LazyLoadingEnabled = true;
            OnContextCreated();
        }
    
        /// <summary>
        /// Инициализация нового объекта MyHomeFinanceEntities.
        /// </summary>
        public MyHomeFinanceEntities(string connectionString) : base(connectionString, "MyHomeFinanceEntities")
        {
            this.ContextOptions.LazyLoadingEnabled = true;
            OnContextCreated();
        }
    
        /// <summary>
        /// Инициализация нового объекта MyHomeFinanceEntities.
        /// </summary>
        public MyHomeFinanceEntities(EntityConnection connection) : base(connection, "MyHomeFinanceEntities")
        {
            this.ContextOptions.LazyLoadingEnabled = true;
            OnContextCreated();
        }
...
}
Неработающий код:
Код: plaintext
_Context = new MyHomeFinanceEntities();
Теперь, если явно забирать из конфига строку подключения, то все работает:
Код: plaintext
_Context = new MyHomeFinanceEntities(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).ConnectionStrings.ConnectionStrings["MyHomeFinanceEntities"].ConnectionString);
...
Рейтинг: 0 / 0
App.config
    #37424584
DenisRum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
           var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder(config.ConnectionStrings.ConnectionStrings["db"].ConnectionString);
            builder.ProviderConnectionString = connectionString;
            config.ConnectionStrings.ConnectionStrings["db"].ConnectionString = builder.ConnectionString;
            config.Save();
            ConfigurationManager.RefreshSection("connectionStrings");
...
Рейтинг: 0 / 0
App.config
    #37431138
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DenisRumМожно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
           var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder(config.ConnectionStrings.ConnectionStrings["db"].ConnectionString);
            builder.ProviderConnectionString = connectionString;
            config.ConnectionStrings.ConnectionStrings["db"].ConnectionString = builder.ConnectionString;
            config.Save();
            ConfigurationManager.RefreshSection("connectionStrings");

это не хорошо.
Если кто-нибудь залезет и поменяет строку подключения работающей программы.
Формируйте строку в момент запуск программы и храните в памяти.
Нужно будет покажу, код тривиален.
...
Рейтинг: 0 / 0
App.config
    #37431160
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Proga,
Отлично, покажите.
...
Рейтинг: 0 / 0
App.config
    #37431674
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rsolanovProga,
Отлично, покажите.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
    public class ConnectionStringState
    {
        static string connectionString;
        static string entityConnectionString;
        public ConnectionStringState()
        {
            if (connectionString==null) SetConnectionStringState();
        }

        public string GetConnectionString() { return connectionString; }
        public string GetEntityConnectionString() { return entityConnectionString; }
        
       
        void SetConnectionStringState()
        {
            using (DataSet ds = new DataSet())
            {
                try
                {
                    ds.ReadXml(String.Format(@"{0}\{1}", Application.StartupPath, Resources.XmlConnectionSettingsFileName), XmlReadMode.Fragment);
                }
          .
          .
foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    if (какая-то проверка)
                    {
                            connectionString = dr["SQLConnectionString"].ToString();
                            entityConnectionString = dr["SQLEntityConnectionString"].ToString();
                            break;
                    }
                }

использование
Код: plaintext
1.
con=new SqlConnection(new ConnectionStringState().GetConnectionString());
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / App.config
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]