Сохранить новую строку подключения из приложения Windows Form? - PullRequest
1 голос
/ 26 августа 2011

Я пишу приложение для Windows Forms, VS2010, NET Framework 4.0, кодирование в VB.Я использую диалоговое окно «Настройка подключения к данным Microsoft» в своем приложении, чтобы выбрать источник данных.Кажется, он работает нормально и правильно создает ConnectionString.Однако новая строка подключения не сохраняется в файле app.config.Я не написал код для сохранения файла, и я слепо шатаюсь по этой области.Вот код, который я использую:

  Public Sub SaveConnectionString(ByVal strConnectionName As String, strConnectionString As String)

    Dim Config As Configuration
    Dim Section As ConnectionStringsSection
    Dim Setting As ConnectionStringSettings
    Dim ConnectionFullName As String

    'There is no inbuilt way to change application 
    'setting values in the config file.
    'So that needs to be done manually by calling config section object.

    Try
        'Concatenate the full settings name
        'This differs from Jakob Lithner. Runtime Connection Wizard
        'The ConnectionFullName needs to 
        'refer to the Assembly calling this DLL

        ConnectionFullName = String.Format("{0}.MySettings.{1}", _
            System.Reflection.Assembly.GetCallingAssembly.EntryPoint.DeclaringType.Namespace, strConnectionName)

        'Point out the objects to manipulate
        Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
        Section = CType(Config.GetSection("connectionStrings"),  _
            ConnectionStringsSection)
        Setting = Section.ConnectionStrings(ConnectionFullName)

        MsgBox("To File: " & Config.FilePath.ToString & vbCrLf &
               "Conn. String: " & strConnectionString & vbCrLf &
               "Conn. Name: " & strConnectionName,
               MsgBoxStyle.Information, "Saving Connection String...")

        'Ensure connection setting is defined 
        '(Note: A default value must be set to save the connection setting!)
        If IsNothing(Setting) Then Throw New Exception("There is no connection with this name defined in the config file.")

        'Set value and save it to the config file
        'This differs from Jakob Lithner. Runtime Connection Wizard
        'We only want to save the modified portion of the config file 
        Setting.ConnectionString = strConnectionString
        Config.Save(ConfigurationSaveMode.Full, True)

    Catch ex As Exception

    End Try
End Sub

MsgBox показывает ожидаемое имя файла и путь к файлу .config, но файл никогда не обновляется.Я пробовал запустить его из среды IDE VS2010, непосредственно запустить файл .exe, созданный компиляцией, создать программу установки и установить программу, запустить ее (сама программа работает нормально) и установить на другой компьютер.Всегда одно и то же - никаких сообщений об ошибках и файл .config не обновляется.

Программа считывает строку подключения из файла appname .exe.config.Если я отредактирую файл exe.config вручную, я смогу без проблем использовать разные строки подключения.

Если кто-нибудь может предложить какие-либо рекомендации, я буду ОЧЕНЬ благодарен!Заранее спасибо.

1 Ответ

1 голос
/ 04 сентября 2011

Изрядное количество просмотров страниц на мой вопрос, но ответов нет. К счастью, я нашел свой ответ. Спасибо http://www.thecodemonk.com/2008/02/18/tableadapter-connection-strings за это простое решение.

Даже не пытайтесь сохранить в приложении настройку «AppNameConnectionString». Вместо этого просто сохраните желаемую строку подключения в качестве пользовательской настройки, то есть «ActiveConnectionString» типа string. Я заменил весь блок кода, который я цитировал в своем первоначальном вопросе, на

       My.Settings.ActiveConnectionString = strConn ' previously built conn string
       My.Settings.Save()

Что позволяет этому пользовательскому параметру стать активной строкой соединения, так это события, связанные с .Net, управляющим настройками. В настройках проекта есть кнопка «Просмотр кода» для доступа к обработчикам событий настроек. В событии SettingsLoaded просто задайте для параметра строки подключения приложения значение параметра пользовательской строки подключения:

       Private Sub MySettings_SettingsLoaded(sender As Object, e As System.Configuration.SettingsLoadedEventArgs) Handles Me.SettingsLoaded
        Me.Item("MyAppNameConnectionString") = Me.Item("ActiveConnectionString")
    End Sub

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

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

    Private Sub MySettings_PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Handles Me.PropertyChanged
        If e.PropertyName = "ActiveConnectionString" Then
            Me.Item("MyAppNameConnectionString") = Me.Item("ActiveConnectionString")
        End If
    End Sub

Еще раз спасибо TheCodeMonk за то, что поделились этим потрясающе простым, но, по-видимому, очень неуловимым решением!

...