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


Автор: Drabuna 10.4.2008, 16:49
С помощью визарда сделал подключение к SQL Server. В settings.settings сгенерировалась строка подключения. Мне надо менять эту строку во время выполнения программы, допустим чтобы к базе коннектились разные пользователи. Возможно ли это сделать и как?

Прочитал аналогичные темы, но решения так и не нашел.

Заранее спасибо за помощь.

Автор: Cristoff 10.4.2008, 16:53
Аналогичная проблема и у меня. 

Программа должна использовать параметры введенные вручную использовать для подключения к серверу MS SQL, но мастер уже сгенерировал строку и не дает ее менять, т.к. она только на чтение.

Кто как решал эту проблему?

Автор: Drabuna 10.4.2008, 22:34
Проблема решена всем спасибо)))

Поменял так

Код

Properties.Settings.Default["Имя_строки"] = "Строка подключения";

Автор: jonie 10.4.2008, 22:58
можно поменять у адаптера в рантайме...
Код

this.myTableAdapter.Connection.ConnectionString = "блаблабла";


неудобно, подумал я...и, наверно был прав...
посему придумал сделать вот такое:
Код

namespace WindowsApplication14.Properties
{
    partial class Settings 
    {
        public void SettingsConf(string conStr)
        {
            this["tempConnectionString"] = conStr;
        }
    }
}
....
//где-то в коде
Properties.Settings.Default.SettingsConf("my connection string");

это возможно т.к. класс Settings объявлен как partial
вызываем 1 раз перед использованием каких-либо соединений и все заработает... наверно..
и не надо ставить руками для каждого адаптера в приложении...


хы.. а Drabuna тож прав) долго писал я...
хотя мне больше нравится не размазывать лоику по всему приложению ) так хоть отследить где ставится этот конекшен стринг можно...

Автор: IApple 11.4.2008, 18:42
Я "плюнул" на строку, которая прописана в сеттингсах (она хороша для отладки, но не для конечного продукта).
Я решил хранить свои настройки по-другому или менять их. Для этого определил 
на глобальном для програмы уровне static переменные в Program.cs:

Код

        static public SqlConnection Conn;   // конект раздавать всем датасетам после создания
        static public SqlConnectionStringBuilder SCSB; // в него можно запихнуть строку из Settings
                                                               // потом изменить какие-то параметры и использовать результат его 

        [STAThread]
        static void Main()
        {
            string Login = "";
            string PSW = "";
            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            try
            {
                // встановити мову інтерфейса
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(Config.Instance.MyLang);
                IPY_Util.MyCulture = Thread.CurrentThread.CurrentUICulture;

                // начальный вариант строки подключення (вы можете его взять из Settings)
                SCSB = new SqlConnectionStringBuilder(Config.Instance.ConnStr);
                // спросить логин-пароль
                DialogResult R = IPY_WCL.zPswBox.GetPassword(ref Login, ref PSW);
                if (R == DialogResult.OK)
                {
                    SCSB.UserID = Login;
                    SCSB.Password = PSW;
                    // в этом месте можно пометять и другие параметры подключения...
                    // после чего SCSB.ConnectionString вернет правильно скомпонованую строку учитывая и их...
                    Conn = new SqlConnection(SCSB.ConnectionString);

                    Conn.Open();       // пробуем конект
                    Conn.Close();

                    // теперь можно создавать главную форму
                    MainForm MF = new MainForm();
                    Application.Run(MF);
                }
            }
            catch (Exception e)
            {
                // какась ашипка при входе (может плохой пароль-логин к примеру)
            }
       }


Все типизированные таблеадаптеры получают изначально строку подключения не эту, а напрямую строковой константой:
Код


        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        private void InitConnection() {
            this._connection = new System.Data.SqlClient.SqlConnection();
            this._connection.ConnectionString = global::XXX.Properties.Settings.Default.XXXConnectionString;
        }


Поэтому после создания нужно сразу после его создания создать ему новое Connection:

Код

  xxxTableAdapter = new xxxTableAdapter();
  xxxTableAdapter.Connection = new System.Data.SqlClient.SqlConnection(Program.SCSB.ConnectionString);


Автор: Ald 31.7.2008, 12:28
Здравствуйте, я недавно начал изучать C# и ADO.NET, использую Visual C# 2008 Express edition . Насколько я понял соединение к БД можно хранить разными способами.
Один из них в config файле: 
Код

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="ConsoleApplication1.Properties.Settings.NORTHWNDConnectionString"
            connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

Как можно в коде программы обращаться к ConnectionString? 
 Я имею ввиду работу с переменной так, если бы я ее объявлял в коде.
Код

string sqlConnectString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=c:\NORTHWND.mdf;" +
                   "Integrated security=SSPI;";
            using (SqlConnection connection = new SqlConnection(sqlConnectString))
            {
                connection.Open(  );
  }


Автор: PashaPash 31.7.2008, 14:13
Ald, ConsoleApplication1.Properties.Settings.Default.NORTHWNDConnectionString

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