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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему connection string это Application setting? 
:(
    Опции темы
Dims
Дата 7.4.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Не пойму, почему Connection string -- это application setting?

Я использую для работы с базой данных элемент проекта DataSet. Этот элемент позволяет визуально представить объекты базы данных и автоматически создаёт объекты и классы для доступа к ним. Информация хранится в файл XSD.

После добавления любого объекта в дизайнер (например, хранимой процедуры), в его свойствах прописывается ссылка на определённый Connection string, который автоматически создаётся в настройках программы. 

То есть, DataSet вынуждает меня пользоваться именно таким типом для хранения строки соединения с базой.

Далее, уже внутри Settings я вижу, что тип Connection string может быть только Application setting, то есть, его должно быть нельзя менять во время выполнения.

Я, конечно, нашёл обходной путь и всё-таки меняю эту настройку, но мне непонятна логика. Разве логично, когда в программу жёстко зашито имя сервера, имя базы данных и другие параметры строки доступа? Ведь база данных не распространяется вместе с программой. Или распространяется?

Ну даже если распространяется, то имя сервера всё равно не может быть таким же на всех компьютерах, где должна работать программа.

Так почему же они сделали, чтобы было так?
PM MAIL   Вверх
Экскалупатор
Дата 7.4.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



на сколько я знаю Connection string можно прописать жестко в код, а можно хранить в файле app.config и из него читать, ну по крайней мере так рекомендуют в книжках по ADO.NET и студия так делает.
PM MAIL ICQ   Вверх
PashaPash
Дата 7.4.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Dims @  7.4.2009,  18:16 Найти цитируемый пост)

Я, конечно, нашёл обходной путь и всё-таки меняю эту настройку, но мне непонятна логика. Разве логично, когда в программу жёстко зашито имя сервера, имя базы данных и другие параметры строки доступа? Ведь база данных не распространяется вместе с программой. Или распространяется?

Кроме обходного пути - в папке проекта лежит app.config, в котором этот connection string задается. Application setting - это просто оберка для чтения этого config-а со значениями по умолчанию.

Добавлено через 37 секунд
Экскалупатор, обогнал...


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 7.4.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Dims, может, я субъективен... но использование ORM мне видится лучшим (по сравнению с типизированным DataSet) во всех отношениях средством реализации DAL.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Экскалупатор
Дата 7.4.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



вообще я на данный момент пишу приложение для роботы с БД Access и мне кажется в моем случае нету особой необходимости писать строку подключения в файл(что соответственно будет вызывать задержки на чтение) да и нерадивый "умный пользователь" может подумать что это какой то "ненужный файл" и сломается вообще все, так что я решил прописать все в код. и еще, перетаскивание на форму и доверяние студии создавать датасеты и все остальное это как то жестко. я когда первый раз с этим столкнулся чуть  в обморок не упал, залез в листинг датасета(который студия создала), а там почти 6000(!) строк, потом переписал сам, только то что мне нужно, получилось строк ~200 и работать стало все намного быстрее. хотя, конечно, кому что ближе... нужно исходить из ситуации


PashaPash, ну, я не хотел...
PM MAIL ICQ   Вверх
thomas
Дата 7.4.2009, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Dims, 
Привет.
Я не знаю почему они так делают.
Когда создаешь типизированный DataSet, то можно в мастере не указывать сохранение connectionString в aap.config.
Вместо этого пойти в свойства проекта и на вкладке Settings создать свойство типа String не для аппликации, а для пользователя. Вот это свойство уже можно редактировать в runTime.

Или писать отдельный partial class с методом переопределения connectionString, который прописан в app.config.

ЗЫ Код добавлю чуть позже с другого компа. (тут есть русский, а там студия и проекты  smile )

Добавлено через 1 минуту и 59 секунд
Кстати если создавать настройки для пользователя, а не для аппликации, то они прописываются в файл user.config для каждого пользователя отдельно.


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


Эксперт
***


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

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



Цитата(Idsa @  7.4.2009,  20:58 Найти цитируемый пост)
использование ORM мне видится лучшим (по сравнению с типизированным DataSet) 

А есть встроенные средства?
PM MAIL   Вверх
Idsa
Дата 8.4.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Dims @  8.4.2009,  16:19 Найти цитируемый пост)
А есть встроенные средства? 

Какая разница, встроенные или нет? Вопрос должен звучать так: "А есть достойные средства?" smile Есть! Из встроенных - Linq To Sql и Entity Framework , из сторонних - NHibernate. Выбирать все же следует из Entity Framework и NHibernate, ибо Linq To Sql - мертворожденная технология.

Это сообщение отредактировал(а) Idsa - 8.4.2009, 13:03


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
thomas
Дата 8.4.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Settings.Designer.vb
Код

<Global.System.ComponentModel.CategoryAttribute("Application"), _
         Global.System.Configuration.ApplicationScopedSettingAttribute(), _
         Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
         Global.System.Configuration.SpecialSettingAttribute(Global.System.Configuration.SpecialSetting.ConnectionString), _
         Global.System.Configuration.DefaultSettingValueAttribute("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""D:\MyProjects\MAIL ID\Mailing1\Mail" & _
            "ing.mdb""")> _
        Public ReadOnly Property MailingConnectionString() As String
            Get
                Return CType(Me("MailingConnectionString"), String)
            End Get
        End Property

<Global.System.ComponentModel.CategoryAttribute("Application"), _
         Global.System.ComponentModel.DescriptionAttribute("Naam van database bestand die zal gebruikt worden in dit programma."), _
         Global.System.Configuration.UserScopedSettingAttribute(), _
         Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
         Global.System.Configuration.DefaultSettingValueAttribute(""), _
         Global.System.ComponentModel.EditorAttribute(GetType(clsFileNameEditor), GetType(System.Drawing.Design.UITypeEditor))> _
        Public Property DataBase() As String
            Get
                Return CType(Me("DataBase"), String)
            End Get
            Set(ByVal value As String)
                Me("DataBase") = Value
            End Set
        End Property

Overload in Settings.vb
Код

Namespace My
    
    'This class allows you to handle specific events on the settings class:

    ' The SettingChanging event is raised before a setting's value is changed.
    ' The PropertyChanged event is raised after a setting's value is changed.
    ' The SettingsLoaded event is raised after the setting values are loaded.
    ' The SettingsSaving event is raised before the setting values are saved.
    Partial Friend NotInheritable Class MySettings
        Public Function SetUserOverride() As String
            Me("MailingConnectionString") = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Chr(34) & Me.DataBase & Chr(34)
            Return Me("MailingConnectionString").ToString()
        End Function
    End Class
End Namespace


myDataSet.Designer.vb
Код

 <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



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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