Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переиначить путь к базе данных, При использовании стандартного типиз дс 
:(
    Опции темы
Softaz
Дата 8.6.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



Когда в VS2005 создается типизированный DataSet, то одним из шагов является задание строки подключения, которая хранится в Properties.Settings.settings
"Берется" она от туда из автоматически сгенерированного студией кода, так что править этот код "вручную" - не выход.
Как я понял, значения Settings только для чтения и изменять их в RunTime нельзя.

А если я хочу изменить путь к базе, не перекомпилируя приложение? Как это сделать?
Заранее спасибо. 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
-ser-
Дата 9.6.2006, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



понятное дело что на этапе создания типизированного DS студии надо конкретные параметры БД. 
а что тебе мешает написать в конфигурационный XML-файл (в тот же .exe.config) строку подключения, и при запуске приложения читать ее.
Код

conn.ConnectionString = ConfigurationSettings.AppSettings["MyDBConnection"];

 


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
Softaz
Дата 9.6.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



Код

conn.ConnectionString = ConfigurationSettings.AppSettings["MyDBConnection"];


Какой conn??? он же создает такой код:

Код

        private void InitConnection() {
            this._connection = new System.Data.OleDb.OleDbConnection();
            this._connection.ConnectionString = global::WindowsApplication1.Properties.Settings.Default.NIX3WConnectionString;
        }


И из других файлов я не нашел способа его изменить (если, конечно, public'ком не сделать). Вот в этом и вопрос. 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Wanderer2019
Дата 9.6.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 1
Всего: 17



Хранение информации в отдельном файле... как, например, в конфигурационном XML-нике описывается 
здесь  

Это сообщение отредактировал(а) Wanderer2019 - 9.6.2006, 09:38
PM ICQ MSN   Вверх
Softaz
Дата 9.6.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



Цитата(Wanderer2019 @  9.6.2006,  09:37 Найти цитируемый пост)
Хранение информации в отдельном файле... как, например, в конфигурационном XML-нике описывается 
здесь  


Епрст. Спасибо, конечно. Однако я знаю КАК ХРАНИТЬ. Проблема в другом.
Вот этот код:
Код

        private void InitConnection() {    
            this._connection = new System.Data.OleDb.OleDbConnection();    
            this._connection.ConnectionString = global::WindowsApplication1.Properties.Settings.Default.NIX3WConnectionString;    
        }

делает VisualStudio2005  и помечает как auto-generated, так что править его вручную нельзя.
Сама переменная _connection помечена как private, так что доступа из другого класса нет.
InitConnection() - тоже, как видно из кода.
Создание нового экземпляра класса и присвоение Connection строки подключения - тоже не выход.
Вы меня понимать?

Добавлено @ 17:45 
Мне нужно в _connection записать
что-то вроде 

Код

this._connection.ConnectionString = "Динамическая строка подключения";

Вместо созданного студией
Код

            this._connection.ConnectionString = global::WindowsApplication1.Properties.Settings.Default.NIX3WConnectionString;     

 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Softaz
Дата 9.6.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



Всем спасибо. Вопрос решен.

Заинтересовался, а что это в строке подключения за |DataDirectory|. Нашел в MSDN
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_fxdeploy/html/be5cbe12-6cb6-49c9-aa59-a1624e1eef3d.htm

After your application has these permissions, it can access the Data Directory by using method calls on classes within the System.IO. You can obtain the path of the Data Directory within a Windows Forms application by using the GetData method to retrieve the value of the DataDirectory variable. This value is also available using the DataDirectory property defined on the CurrentDeployment property of ApplicationDeployment. You can also obtain the data directory path using the relevant variables on the Application class, such as LocalUserAppDataPath. 

И родился такой код:
Код

string BasePath = string.Empty;
//здесь узнаем, откуда приложение запущено и добавляем к пути каталог с файлом БД (находится "внутри" каталога с приложением)
BasePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "path_to_file");
AppDomain.CurrentDomain.SetData("DataDirectory", BasePath);
//С этого момента путь к БД изменен
 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Хоббит
Дата 29.6.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



а я ручками поменял в Settings и все ... если ты dataset создал и не трогает, то и код повторно не генериться 
PM MAIL   Вверх
rulon
Дата 29.6.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 27.6.2006

Репутация: нет
Всего: нет




 Если есть датасет, сгенерированный автоматически, значит должен быть биндинг навигатор и дата грид виев =)) ,
и ещё рядышком где то валяется табле адаптер, если это так - тогда можно сделать след. образом, как поступил когда то я:


// передаём информацию о подключении в форму реадктирования
// информации о диллерах
    DillerEditForm.main_infoTableAdapter.Connection.ConnectionString = this.ConnectionString;
    DillerEditForm.skidka_infoTableAdapter.Connection.ConnectionString = this.ConnectionString;

А коннектион стринг та что this.ConnectionString ничто иное как наполовину вручную, наполовину автоматически сгенерированная исходя из информации предоставленной пользователем строка подключения:

ConnectionString = "Data Source=" + this.cb_selectserver.Text.Trim() + ";" +
                               "Initial Catalog=diller_info;" +
                               "User ID=" + this.tb_user.Text.Trim() + ";" +
                               "Password=" + this.tb_passwd.Text.Trim();

А то что в сурсах валяется строка подключени - так я уже и подзабыл как то в процессе разработки  smile  
PM MAIL   Вверх
mr.DUDA
Дата 29.6.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Softaz, другой хороший вариант решения проблемы - добавить классу датасета свою "нашлёпку" в виде partial class-файла, в котором  объявляешь частичный класс с тем же именем, что у датасета, и выносишь _connection в виде открытого свойства. Либо делаешь свой конструктор, зачитывающий connection string после отработки base-конструктора. 


--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 30.6.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(mr.DUDA @  29.6.2006,  17:25 Найти цитируемый пост)
Softaz, другой хороший вариант решения проблемы - добавить классу датасета свою "нашлёпку" в виде partial class-файла, в котором  объявляешь частичный класс с тем же именем, что у датасета, и выносишь _connection в виде открытого свойства. Либо делаешь свой конструктор, зачитывающий connection string после отработки base-конструктора.  

Именно так мы и делаем  smile  


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Хоббит
Дата 2.7.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



Вот я тормозил ... а надо было то бобавить по 5 строчек к каждому классу smile .... нда 
PM MAIL   Вверх
Softaz
Дата 3.7.2006, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



mr.DUDA, спасибо за "нашлепку" - хороший способ. 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1251 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.