Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Строка подключения


Автор: Real 29.3.2008, 10:48
Как сделать строку подключения вседоступной с разных мест программы?

Добавлено через 2 минуты и 14 секунд
Если очень много FORM, то как сделать вседоступность?

Автор: thomas 29.3.2008, 10:58
Real, 
Приветствую.
Во всех классах, во всех методах и функциях этих классов прописать стоку подключения. Тогда она будет всегда и везде доступна.  smile 

ЗЫ а если серьезно, то сколько раз тебя просить, задавай вопросы по-человечески.
Что ты подразумеваешь под этим
Цитата

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

Обьясни, что ты хочешь делать со своей строкой подключения???
Что ты понимешь под вседоступностью???

В зависимости от того что тебе надо конкретно, будут и различные варианты решения: от публичного класса с одним полем только для чтения, до использования settings проекта.

Автор: Real 29.3.2008, 11:05
2thomas Чтоб можна было из разных FORM иметь доступ до строки подключения на чтение, чтоб при открытии формы чтоб было событие подключение к базы данных?

Автор: thomas 29.3.2008, 11:42
Real, 
тогда используй класс
Код

using System;
using System.Collections.Generic;
using System.Text;

namespace BusinessLayer
{
    public class Common
    {
        public static readonly string connectionString = @"Data Source=(local)\SQLEXPRESS;Initial Catalog=VKL;integrated security=true;";
    }
}

в Data Source подставляй имя своего сервера, а в Initial Catalog имя своей БД.
Там где надо вызываешь это дело так
Код

SqlConnection con = new SqlConnection(Common.connectionString);

ну и далее по тексту.

Успехов.

Автор: MissVictoriya 29.3.2008, 19:49
А может, кто знает, как подключить БД PostgreSQL?

Автор: Bruins777 30.10.2008, 18:09
На мой взгляд строки подключения необходимо хранить в app.config естестевенно в зашифрованном виде.
Выкладываю код как генерировать строку подключения и записывать в config (в зашифрованном виде) сам проверял все у меня работает 


1) Способ генерации строки подключения через SMO (потом через методы класса передается на форму например в комбобокс для списка подключенных серверов и входящих в них БД.

using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;


namespace LookServer
{
    //создаем класс для работы с имеющимися серверами баз данных
    public static class ConnectServers
    {
        private static List<string> arServ = new List<string>();
        //возвращает все серверы находящиеся в сети
        public static object[] ReturnAllServers()
        {
            //Создаем таблицу из всех подключенных серверов в том числе 
            //и сетевых
            DataTable tablesHasServers = SmoApplication.EnumAvailableSqlServers(false);
            //Очищаем List
            arServ.Clear();
            //Заполняем массив List найдеными серверами
            foreach (DataRow dr in tablesHasServers.Rows)
            {
               arServ.Add(dr["Name"].ToString());
            }
            return Obj(arServ);
        }
        public static object[] ReturnAllDatabases(string serversName, string password, string user)
        {
            //Создаем строку подключения выбранного сервера
            ServerConnection servConn = new ServerConnection(serversName, user, password);
            //Передаем ссылку на текущий выбранный сервер
            Server server = new Server(servConn);
            //Создаем перечень баз данных для выбранного сервера
            DatabaseCollection databaseCollect = server.Databases;
            //Очищаем List
            arServ.Clear();
            foreach (Database db in databaseCollect)
                arServ.Add(db.Name);
            return Obj(arServ);         
        }
        private static object[] Obj(List<string> list)
        {
            object[] objMass = new object[list.Count];
            for (int i = 0; i < list.Count; i++)
            {
                objMass[i] = list[i];
            }
            return objMass;
        }
    }

}
Второй способ через propertyGrid 

  private void FormAdvanced_Load(object sender, EventArgs e)
        {
            SqlConnectionStringBuilder strBuild = new SqlConnectionStringBuilder();      
            propertyGridMain.SelectedObject = strBuild;
            label1.Text = ""; // Отражается генерируемая строка подключения
//Потом передается для проверки в SqlConnectionStringBuilder 
        }   
        private void propertyGridMain_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
           
            if (e.ChangedItem.GridItems != null)
            {
                label1.Text += e.ChangedItem.Label.Trim() + "=" +
                    e.ChangedItem.Value.ToString() + ";" ;
            }
        }
Завершающий шаг это сохранения в файле app.config строки подключения и шифровка его 

private void okButton_Click(object sender, EventArgs e)
        {            
                //Создаем строку подключения в xml file
                System.Configuration.Configuration config =
                    System.Configuration.ConfigurationManager.OpenExeConfiguration(
                        System.Configuration.ConfigurationUserLevel.None);
            //шифруем содержание строки подключения по умолчанию RSA
                config.ConnectionStrings.SectionInformation.ProtectSection(null);
                //Записываем xml file
               config.ConnectionStrings.ConnectionStrings.Add(
                    new System.Configuration.ConnectionStringSettings("SQLConnect", ConnectStringBuilder()));
                config.Save();
                ConnectDatabaseForm frm = this;
                frm.Close(); 
           Метод который возвращает готовую строку подключения
        }
Просьба написать предложения и замечания может есть более простой способ бороться с универсальными строками подключения пишите буду рад!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)