通过changin app.config

时间:2015-11-10 17:14:17

标签: vb.net winforms data-binding connection-string

之前可能已经提出并回答过这个问题,但我不知道如何搜索它。

情况:

我有一个带有许多绑定控件的Winforms应用程序。我们有四个测试环境,目前,我已经连接到每个数据源并使用Data Source Configuration Manager导入所有数据表和存储过程,然后将连接字符串信息存储在我的app.config文件中。当我调用连接字符串时,我正在使用My.Settings。[连接字符串名称] .ToString(我的第一个问题)。

对于所有数据绑定控件(主要是datagridview),我在拖动新数据集+表适配器和绑定源之前删除旧数据集+表适配器和所有绑定源。我有一个Public Sub清除并重新绑定我的所有控件,但代码会调用每个数据源的特定名称(例如,见下文)。

Public Sub SetRegionDEBindings(ByVal errorCode As String, ByVal Region As String)
    Try
        Dim selectLOMAbyRegion As New BindingSource
        selectLOMAbyRegion = Me.SpSelectLOMABindingSource

        Me.SpSelectLOMATableAdapter.Fill(Me.PrdGISDataSet.spSelectLOMA, errorCode, Region)

        Me.dgDE.DataSource = selectLOMAbyRegion
        Me.bnDE.BindingSource = selectLOMAbyRegion

        Me.txtDEIssueDte.DataBindings.Add(New System.Windows.Forms.Binding("Text", selectLOMAbyRegion, "IssueDte", True))
        Me.txtDECaseNum.DataBindings.Add(New System.Windows.Forms.Binding("Text", selectLOMAbyRegion, "CaseNum", True))
        Me.txtDECommNum.DataBindings.Add(New System.Windows.Forms.Binding("Text", selectLOMAbyRegion, "CommNum", True))

        With Me.dgDE
            Me.DataGridViewTextBoxColumn1.Name = "DERegion"
            Me.StateDataGridViewTextBoxColumn.Name = "DEState"
            Me.LatitudeDataGridViewTextBoxColumn.Name = "Latitude"
            Me.LongitudeDataGridViewTextBoxColumn.Name = "Longitude"
            Me.IdLOMADataGridViewTextBoxColumn.Visible = False
            Me.DiskNumDataGridViewTextBoxColumn.Visible = False
            Me.DataGridViewTextBoxColumn1.Visible = False
            Me.InsertDteDataGridViewTextBoxColumn.Visible = False
            Me.LOMAStatusDataGridViewTextBoxColumn.Visible = False
            Me.NotesDataGridViewTextBoxColumn.Visible = False
            Me.StateDataGridViewTextBoxColumn.Visible = False
            Me.SupercedeDataGridViewCheckBoxColumn.Visible = False
            Me.UpdatedDteDataGridViewTextBoxColumn.Visible = False
        End With

        Me.dgDE.Visible = True
        Me.dgDE.Rows(0).Selected = True
        Me.dgDE.BringToFront()

        If Me.dgDE.Rows(0).Cells("LOMAStatusDataGridViewTextBoxColumn").Value.ToString = "2" Then
            MessageBox.Show("Warning: this case number has been previously inserted.")
        End If
    Catch ex As Exception
        MessageBox.Show("Error setting data entry bindings: " & ex.Message.ToString)
    End Try
End Sub

我的问题:

  1. 我应该从头开始创建app.config文件吗?

  2. 如果我需要更改服务器环境,我是否可以更改app.config文件(并调用Configuration.ConfigurationManager而不是My.Settings...)?

  3. 如果我更改app.config文件,如何在不打开解决方案,重新创建数据源以及清理/重建的情况下重新绑定数据源? (因为目前,我连接到新的data source,将绑定源拖到我的控件上,并手动更新数据集代码)

  4. 我看过这里:

    How To Change The Connection String saved in My.Settings in VB 2010

    https://msdn.microsoft.com/en-us/library/ms171889(v=vs.90).aspx

    https://social.msdn.microsoft.com/Forums/en-US/7483b816-be7a-4204-a4d3-cfb14b2aae26/how-to-dynamically-change-connection-string-in-generated-dataset-class?forum=adodotnetdataset

    但是,就像我说的那样,我不确定我是否在寻找正确的答案。

1 个答案:

答案 0 :(得分:1)

在运行时更改连接字符串

要在运行时动态更改连接字符串,您应该在应用程序中应用一些小的更改。 (我假设您的连接字符串的名称是MyMainConnectionString

  1. 更改MyMainConnectionString文件中的Setting

    • 在设计器中打开设置
    • 选择连接字符串值并将其复制为示例Data Source=(localdb)\v11.0;Initial Catalog=TestDB;Integrated Security=True
    • Type更改为string
    • Scope更改为User
    • 将复制的值粘贴到Value
  2. 从现在开始,如果要在向导中向TableAdapter添加DataSet,请选择不保存连接字符串。

  3. 现在您有一个普通的字符串设置MyMainConnectionString,可以在运行时更改并保存。

    您可以这样设置值:

    My.Settings.MyMainConnectionString= "Some New Value"
    

    也可以使用其他预定义属性设置值,例如DebugConnectionStringTestConnectionStringProductionConnectionString,并根据某些条件或其他设置设置此值:

    My.Settings.MyMainConnectionString = My.Settings.TestConnectionString
    

    要保存设置,您可以使用:

    My.Settings.Save()
    


    在设计时更改连接字符串

    您只需在Setting.settings文件中更改连接字符串的值即可。


    更改已部署应用程序的连接字符串

    您可以在yourApplication.exe.config中更改连接字符串的值。