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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое подключение к БД 
V
    Опции темы
Redstuff
Дата 24.6.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



В книге "Visual Studio .NET разработка приложений баз данных" написано о динамическом подключении, но что-то я не могу найти параметра Dynamic Propertys.

Как тогда задавать параметры соеденения с БД в момент запуска приложения, чтобы не приходилось каждый раз компилировать.

ПО:
Microsoft SQL Server 2005
Visual Studio Pro


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
thomas
Дата 24.6.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Redstuff, 
Привет.
пишешь простенький класс оболочку доступа и работы с БД с параметрами в конструкторе класса.
При запуске приложения создаешь экземпляр класса с нужными параметрами и дальше юзаешь его.
Можно его использовать для работы с разными базами одновременно. Для одной базы один экземпляр класса, для другой другой.
ООП-с.   smile 

Класс примерно такой:
Код

 class AccessDB
    {        
        # region Declaration
            private SqlCommand dbCmd;
            private SqlConnection dbCon;
            private SqlDataAdapter dbDa;
            private SqlCommandBuilder cmdBuild;
            private DataSet ds;
            private string conStr;
        # endregion
       
        public AccessDB(string mdb, string db)
        {
            conStr = @"Data Source=(local); " +
                     @"integrated security = true;" +
                     @"Trusted_Connection = yes; database= " + db +
                     @"; AttachDbFilename = " + mdb;
            intmdb();
        }

        private void intmdb()
        {
            try
            {
                dbCon = new SqlConnection();
                dbCon.ConnectionString = conStr;
                dbCmd = new SqlCommand();
                dbCmd.Connection = dbCon;
                dbDa = new SqlDataAdapter(dbCmd);
                ds = new DataSet();
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show("init fout :" +ex.Message, "fout init dataset");
            }
        }
        // этот метод позволяем создать шапку таблицы в ДатаСете, сама таблица будет пустой.
        public void InitDataSet(string tabelNm, string sql)
        {
            sql = sql.Replace(";", "");
            dbCmd.CommandText = sql + " where 1=0;"; // фишка в этом невыполнимом условии.
            dbDa.Fill(ds, tabelNm);
        }

        public void FillDataSet(string tabelNm, string sql)
        {           
                if(ds.Tables.IndexOf(tabelNm)!=-1) ds.Tables[tabelNm].Clear();
                dbCmd.CommandText = sql; //dbDa.FillSchema(ds, SchemaType.Source, tabelNm);
                dbDa.Fill(ds, tabelNm);
        }

        public void DoNonQuery(string sql)
        {
            try
            {
                dbCon.Open();
                dbCmd.CommandText = sql;
                dbCmd.CommandType = CommandType.Text;
                dbCmd.ExecuteNonQuery();
                dbCon.Close();
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show("ExNonQuery fout :" + ex.Message, "fout Quary");
            }
            finally
            {
                dbCon.Close();
            }
        }

        public int DoUpdate(string dsNm)
        {
            ds.DataSetName = dsNm;
            cmdBuild = new SqlCommandBuilder(dbDa);
            dbDa.UpdateCommand = cmdBuild.GetUpdateCommand();
            return dbDa.Update(ds.Tables[dsNm]);
        }

        public int DoInsert(string dsNm)
        {
            ds.DataSetName = dsNm;
            cmdBuild = new SqlCommandBuilder(dbDa);
            dbDa.InsertCommand = cmdBuild.GetInsertCommand();
            return dbDa.Update(ds.Tables[dsNm]);
        }

        public ConnectionState status()
        {
            return dbCon.State;
        }

        public DataSet DS
        { 
            get{return ds;}
            set{}
        }
    }


Данный класс позволяет работать с различными БД, надо просто указать путь к БД и имя БД. 

Ты можешь реализовать в классе  методы и  функции  которые нужны тебе. 

Кстати путь к Базе и имя Базы можно зашивать в файл конфигурации или в регистр Винды. 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Redstuff
Дата 24.6.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



thomas, спасибо. А можно че попроще? я токо начинаю изучение MS SQL Server'a.


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
thomas
Дата 24.6.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Redstuff, 
Чтобы подключиться к базе на сервере нужен connectionString, где указывается путь к базе и имя самой базы, плюс имя сервера и т.д.
То что тебе нужно чтобы соединиться с базой есть в приведенном примере.
Вот это ты по любому должен прописывать  в твоей форме:
Код

            private SqlCommand dbCmd;
            private SqlConnection dbCon;
            private SqlDataAdapter dbDa;
            private DataSet ds;
            private string conStr;
       
            conStr = @"Data Source=(local); " +
                     @"integrated security = true;" +
                     @"Trusted_Connection = yes; database= " + db +
                     @"; AttachDbFilename = " + mdb;
        
                dbCon = new SqlConnection();
                dbCon.ConnectionString = conStr;
                dbCmd = new SqlCommand();
                dbCmd.Connection = dbCon;
                dbDa = new SqlDataAdapter(dbCmd);
                ds = new DataSet();


А дальше по ходу пьесы в нужный момент открываешь соединение с базой, имеешь её и снова закрываешь соединение.
И так столько сколько нужно. 

И не плохо почитать библию программиста.

удачи. 



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Redstuff
Дата 24.6.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



thomas, еще раз спасибо!  smile 

А что же тогда в книге написано: "В открывшемся дополнительном окне Dynamic Propertys установите флажок
Map property to a key in configuration file и нажмите кнопку OK (рис. 1.7)."

user posted image

"В результате свойства строки соединения будут помещены во внешний конфигурационный файл, и их впоследствии можно будет менять без перекомпиляции приложения."

Это сообщение отредактировал(а) Redstuff - 24.6.2007, 17:51


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
thomas
Дата 25.6.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Redstuff, 
Привет.
Книгу нашел, сейчас качаю.
Давай поподробнее опиши что и как ты делаешь и где это в книжке описано. Плюс какую студию ты используешь? (2003 или 2005)
Будем еще раз посмотреть.  smile 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Redstuff
Дата 25.6.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Привет thomas!
Студия 2005
Начиная со страницы 30.
Добавляю контрол на форму sqlConnection1 и там нет этой строчки в параметрах - Dynamic Propertys...

Это сообщение отредактировал(а) Redstuff - 25.6.2007, 11:52


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
thomas
Дата 25.6.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Redstuff, 
Цитата

что-то я не могу найти параметра Dynamic Propertys.

В 2005 студии такого действительно нет, книга написана про 2003 и там это есть. (у меня стоят обе студии)

Но в принципе это не проблема. Тебе просто придется самому прописывать эти свойства в конфигурационный файл или в регистр.
Во втором случае, после установки программы можно будет менять значения в регистре машины пользователя.

Пример с конфигурацией у меня где-то есть. Сейчас поищу.

Во нашел.

Добавляешь в using System.Configuration;

Потом в загрузке главной формы прописываешь:
Код

private void Form1_Load(object sender, EventArgs e)
        {
            string pad = ConfigurationManager.AppSettings["pad"];
            pad += ConfigurationManager.AppSettings["db"];
            
            initialisaties();
        }

А так выглядит код файла конфигурации:
Код

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="contype" value="provider=Microsoft.Jet.oledb.4.0; data source="/>
        <add key="pad" value="D:\vti\Margo\"/>
        <add key="db" value="cyberpro.mdb"/>
    </appSettings>
</configuration>

Только пропиши свой провайдер для SQLSERVER и соответственно свой путь и свою базу.




 

Это сообщение отредактировал(а) thomas - 25.6.2007, 12:17


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Redstuff
Дата 25.6.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



thomas, спасибо за помощь!


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
tol05
Дата 25.6.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

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



Примечание: специально для строк подключения в конфигурационных файлах введена секция 
Код

<connectionStrings>
  <add name="DatabaseConnection" 
    connectionString="Data Source=(local);Initial 
    Catalog=Northwind;Integrated Security=SSPI;" />
</connectionStrings>


и юзать нужно, соответственно через ConfigurationManager.ConnectionStrings...
так проще и типизированней smile

Код

string connectionString = 
          ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;


Это сообщение отредактировал(а) tol05 - 25.6.2007, 12:43


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
thomas
Дата 25.6.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



tol05, 
Спасибо брат. 
Век живи век учись.
А нашему буржуйскому преподу -1.  smile 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Redstuff
Дата 11.8.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



thomas, можно подробней о XML "коде файла конфигурации" а то я даж не знаю куда его подключать. А то интересно и такой способ узнать.

А я сделал может немного коряво, но работает.
Код

private void btnConnect_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection();
            try
            {
                conn.ConnectionString =
                "initial catalog=" + txtInitialCatalog.Text + ";" +
                "integrated security = true;" +
                "data source=" + txtDataSource.Text + ";";
                //"user id=" + txtUserID.Text + ";" +
                //"password=" + txtPassword.Text + ";" +
                //"workstation id=9E0D682EA8AE448;persist security info=True;";
                SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT * FROM " + txtTable.Text, conn);
                DataSet ds = new DataSet();
                conn.Open();
                dataAdapter.Fill(ds);
                dataGrid1.DataSource = ds.Tables[0].DefaultView;
            }
        }


Заполняю текстовые поля: сервер, имя БД, название таблицы. Подключаюсь и в датагрид выводиться таблица.
Хочу усовершенствовать:
- добавить ComboBox для сервера, тип аутентификации....
- при выборе аутентификации где нужно вводить пароль и логин становились доступны эти поля
- чтобы был список всех доступных баз данных и обновлялся онлайн при выборе сервера  (вот с этим прошу вашей помощи)
- список таблиц при выборе БД


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Exception
Дата 11.8.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Нажимаешь Add Item... => Application Configuration File или не помню как там он называется. У тебя появляется файл app.config. При компиляции он автоматически копируется в директорию с приложением и переименовывается в имя_приложения.eye.config. Вот в этот файл и нужно засунуть твой XML с параметрами конфигурации.
А вообще-то, пора научиться пользоваться Google и MSDN:
http://msdn2.microsoft.com/en-us/library/m...192(VS.80).aspx

Добавлено через 2 минуты и 36 секунд
Да, кстати,
Модератор: одна тема - один вопрос!
PM   Вверх
Redstuff
Дата 11.8.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Exception, спасибо.
Поиском пользуюсь, но не всегда нахожу то что нужно... Поиск помогает только тогда, когда точно знаешь чего искать (нужно ведь правильный запрос еще задать)...


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Redstuff
Дата 12.8.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Чето не могу ника разобраться  smile 
Цитата(tol05 @ 25.6.2007,  12:40)
Примечание: специально для строк подключения в конфигурационных файлах введена секция 
Код

<connectionStrings>
  <add name="DatabaseConnection" 
    connectionString="Data Source=(local);Initial 
    Catalog=Northwind;Integrated Security=SSPI;" />
</connectionStrings>


добавил в файл app.config
изменив на свои параметры:
Data Source: SERVER\SQLEXPRESS (Name Server)
Initial Catalog: Pubs (Name DataBase)
Integrated Security: true (Аутентификация Windows)
Цитата(tol05 @ 25.6.2007,  12:40)

и юзать нужно, соответственно через ConfigurationManager.ConnectionStrings...
так проще и типизированней smile

Код

string connectionString = 
          ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;

Вот весь проект:
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Configuration;

namespace Authentication
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string connectionString = ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;
        }
    }
}

Выдает такую ошибку: The name 'ConfigurationManager' does not exist in the current context    

Exception на мсдн еще хуже (( если честно...




--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
tol05
Дата 12.8.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

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



У тебя в проекте reference на System.Configuration.dll добавлена? Если да, то давай код конфигурационного файла. Смотреть надо...


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Redstuff
Дата 12.8.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



tol05, ага ее не хватало. Добавил теперь все ок! Спасибо!!!

Теперь достаточно менять файл App.config чтобы подключаться к любому другому серверу и бд, правильно?


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
tol05
Дата 12.8.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

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



да. Это и самый правильный способ. Вплоть до того, что можно у приложений менять конфиги местами или менять конфиги программно из стороннего приложения, и тем самым управлять их работой smile


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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