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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ConnectionString и VS2008, разные методы подключения в VS03 и VS08 
V
    Опции темы
lokiVan
Дата 5.4.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всех привествую.

Обращаюсь к вам в надежде получить помощь.
Появилась насущная проблема перевода проекта на платформу VS2008. Столкнулся с такой проблемой.

На старой платформе при подключении во время загрузки формы считывалось имя сервера и подставлялось в ConnectionString

Код

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data;
using System.Security.Principal;
using System.DirectoryServices;


private void Form1_Load(object sender, System.EventArgs e)
{
WindowsIdentity t = WindowsIdentity.GetCurrent();
string txt = t.Name.ToString();
string[] SimpleSentences;
SimpleSentences = txt.Split('\\');
for(int i=0;i<SimpleSentences.Length;i++)
str += SimpleSentences[0].ToString();
}



Код


this.oleDbConnection1.ConnectionString = @"Integrated Security=SSPI;Packet Size=4096;Data Source=(local);Tag with column collation when possible=False;Initial Catalog=PROJECT;Use Procedure for Prepare=1;Auto Translate=True;Persist Security Info=False;Provider=""SQLOLEDB.1"";Workstation ID="" + str + "";Use Encryption for Data=False";



В Восьмой студии (да и в пятой тоже, походу), я так понял необходимо плясать от Setting.cs. 
Т.е. прописывать строку соединения там, а потом обращаться к ней из Settings.Designer.cs

 http://forum.vingrad.ru/topic-132285.html
Здесь мне показалось обсуждалась похожая проблема, но дальше осознания сути проблемы не продвинулся.
Сутки ломаю голову уже больше суток smile 
Уповаю на вашу помощь!!!!!!!! 


Это сообщение отредактировал(а) lokiVan - 5.4.2008, 15:11
PM MAIL   Вверх
mr.DUDA
Дата 5.4.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Допустим, в проекте есть настройки Setting.cs, строка соединения лежит в настройке под именем MyConnectionString (соответственно, есть свойство Setting.Default.MyConnectionString), имя пользователя там прописано как User1.

Теперь добавляем в проект новый класс, пишем код:
Код
using System;
using System.Security.Principal;

namespace WindowsApplication1
{
    partial class Setting
    {
        protected override void OnSettingsLoaded(object sender, System.Configuration.SettingsLoadedEventArgs e)
        {
            base.OnSettingsLoaded(sender, e);

            MyConnectionString = MyConnectionString.Replace("User1", WindowsIdentity.GetCurrent().Name)
        }
    }
}



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


Новичок



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

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




С Вашего позволения разложу по полочкам.

По умолчанию создается строка соединения PROJECTConnectionString 

Вместе с ней создается   Settings.cs

Код

namespace PROJECR_2008.Properties {

    public sealed partial class Settings {
        
        public Settings() {
        }
        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
        }
        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
        }
    }
}


В теле кода Settings.Designer.cs генерируется код под конкретную строку подключения

Код

namespace PROJECR_2008.Properties {
    
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
        
        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
        
        public static Settings Default {
            get {
                return defaultInstance;
            }
        }
        
        [global::System.Configuration.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=XXX-XXX\\;Initial Catalog=PROJECT;Integrated Security=True")]
        public string PROJECTConnectionString {
            get {
                return ((string)(this["PROJECTConnectionString"]));
            }
        }
    }
}


Если я правильно понимаю, то по сути должна происходить замена значения строки подключения по умолчанию на значение заданное в классе Class1.cs
Не разобрался только куда нужно поставлять содержимое класса. 


Код

using System;
using System.Security.Principal;
namespace WindowsApplication1
{
    partial class Setting
    {
        protected override void OnSettingsLoaded(object sender, System.Configuration.SettingsLoadedEventArgs e)
        {
            base.OnSettingsLoaded(sender, e);
            MyConnectionString = MyConnectionString.Replace("User1", WindowsIdentity.GetCurrent().Name)
        }
    }
}


Извиняюсь за твердолобость. За студией сидел последний раз 4 года назад (А тут еще отличия от .net) 
Чувствую придется наверстывать.
PM MAIL   Вверх
mr.DUDA
Дата 5.4.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Класс добавляется командой "Add New Item... / Class". Содержимое будет таким:
Код
using System;
using System.Security.Principal;

namespace PROJECR_2008.Properties
{
    partial class Settings
    {
        protected override void OnSettingsLoaded(object sender, System.Configuration.SettingsLoadedEventArgs e)
        {
            base.OnSettingsLoaded(sender, e);

            this["PROJECTConnectionString"] = PROJECTConnectionString + ";User ID=" + WindowsIdentity.GetCurrent().Name + ";Password=123";
        }
    }
}

Или примерно таким же, зависит от способа подключения к SQL Server.

Вот линк на примеры строки соедиения: http://www.connectionstrings.com/?carrier=sqlserver2005


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


Новичок



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

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



Благодарю за ответ.

В теле класса-то все понятно.Как раз то что надо.  
Не понятно как его воткнуть вот сюда,чтобы заменить существующее подключение

 
Код

        [global::System.Configuration.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=XXX-XXX\\;Initial Catalog=PROJECT;Integrated Security=True")]
        public string PROJECTConnectionString {
            get {
                return ((string)(this["PROJECTConnectionString"]));
            }
        }


я предполагал что это будет выглядеть  приблизително следующим образом. Тут используются My.MySettings заданные ранее
Мне казалось что аналогично должно было бы быть и в моем случае...

Код

 <Global.System.Diagnostics.DebuggerNonUserCodeAttribute()>  _
        Private Sub InitConnection()
            Me._connection = New Global.System.Data.OleDb.OleDbConnection
            Me._connection.ConnectionString = Global.MassPost.My.MySettings.Default.SetUserOverride()
        End Sub


Раньше просто создавал строку туда закидывал текущее имя сервака и приклеивал к текущей строке подключения.
А как чер класс реализовать  smile ....  

Можно создать отдельное подключение, повесить на событие и т.п. Но на формах программы навешано крайне много активных текстовых полей. Не хотелось бы все прописывать вручную. Было бы здорово просто изменить сгенирированный на автомате connectingString, а потом работать с ним стандартными средствами Студии. 





Это сообщение отредактировал(а) lokiVan - 5.4.2008, 20:53
PM MAIL   Вверх
mr.DUDA
Дата 6.4.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Автосгенерированный код будет заменяться студией с потерей изменений, внесённых вручную. Так что это неподходящий вариант.


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


Новичок



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

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



Это я тоже понимаю. 
Ладно пока ручками все пропишу. Потом покапаюсь в этом вопросе.
Большое спасибо за помощь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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