2011-05-18 89 views
1

我剛剛從另一位不在公司的開發人員那裏繼承了「數據庫專家」的角色,所以如果我聽起來特別不好意思,請原諒我。如何設置表格適配器的連接字符串(對於動態設置的字符串)

該應用程序是一個VB.NET 4應用程序。

我們的表適配器的數據庫連接字符串是在運行時設置的my.settings(My.Settings.DBConnectionString)中的字符串。當我不得不修改表適配器時,他們看不到My.Settings.DBConnectionString中的任何數據,因此在我設置「真實」(或硬編碼)連接字符串之前,不允許編輯它們。現在我想將其更改回動態設置,但Visual Studio似乎不想讓我這樣做。我相信我已經在.xsd文件後面的自動生成的代碼中找到能夠更改特定表格適配器的連接字符串的位置,但是如果我這樣做會發生不好的事情嗎?或者是否有其他一些機制來更改表格適配器的連接字符串,而不是我不知道的Visual Studio一側的屬性窗格?

正如第二個問題一樣,這裏是否存在不良/不是最佳實踐?

謝謝!

回答

0

這聽起來像你的表適配器的連接字符串正在由application setting設置?

我不知道你動態地設置他們的意思是相當的,但它聽起來像你可能已經遇到了經常有爭議的(我知道,引證需要...)功能這意味着你可以不設置的應用範圍運行時的設置。這是因爲自動生成的類爲您的應用設置提供了只讀屬性。用戶範圍設置可以更改(有關詳細信息,請參閱上一個鏈接)。

有一個post here討論改變可能有用的應用程序設置。

如果您確實需要在運行時更改應用程序設置,則可能需要實施您自己的設置機制,該機制使用XML,註冊表或其他方法來存儲,檢索和更改設置。

希望幫助

編輯:

突然發生,我認爲我已經無法正確讀取你的問題。您的連接字符串不僅可能來自應用程序設置,而且您的表適配器可能會綁定到該連接字符串?如果是這樣,請參閱this post,它解釋瞭如何注入/更改表適配器的連接字符串。似乎對我來說有點破綻,但它應該起作用。

1

下面是我如何解決在運行時更改連接字符串的問題。希望這可以幫助。

在我的設置,我有2項 enter image description here

我有一個數據集名爲DataSet1的

enter image description here

我有3種形式稱爲Form1上,窗體2和Form3

Form1中有以下控件

enter image description here

而下面的代碼

Public Class Form1 

    Private Sub GenericoBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles GenericoBindingNavigatorSaveItem.Click 
     Me.Validate() 
     Me.GenericoBindingSource.EndEdit() 
     Me.TableAdapterManager.UpdateAll(Me.DataSet1) 

    End Sub 



    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     Me.TableAdapterManager.Connection.ConnectionString = My.MySettings.Default._001NewConnectionString 

     Me.TableAdapterManager.UpdateAll(Me.DataSet1) 

     Label5.Text = My.MySettings.Default._001NewConnectionString 

    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     My.MySettings.Default("_001NewConnectionString") = "Data Source=" & TextBox1.Text & "\" & 
      TextBox2.Text & ";Initial Catalog=001;Persist Security Info=True;User ID=" & 
      TextBox3.Text & ";Password=" & TextBox4.Text 
     My.MySettings.Default.Save() 

     Me.TableAdapterManager.Connection.ConnectionString = My.MySettings.Default._001NewConnectionString 
     Me.TableAdapterManager.UpdateAll(Me.DataSet1) 

     Try 
      Me.GenericoTableAdapter.Fill(Me.DataSet1.generico) 
     Catch ex As Exception 
      MessageBox.Show("error Form1") 
     End Try 
    End Sub 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
     Dim f As New Form2(TableAdapterManager.Connection.ConnectionString) 
     f.ShowDialog() 

    End Sub 

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 
     Dim f As New Form3(TableAdapterManager.Connection.ConnectionString) 
     f.ShowDialog() 
    End Sub 
End Class 

窗體2具有以下控制

enter image description here

用下面的代碼

Public Class Form2 

    Private Sub UtentesBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles UtentesBindingNavigatorSaveItem.Click 
     Me.Validate() 
     Me.UtentesBindingSource.EndEdit() 
     Me.TableAdapterManager.UpdateAll(Me.DataSet1) 

    End Sub 
    Public Sub New(ConnectionString As String) 
     InitializeComponent() 
     Me.TableAdapterManager.Connection.ConnectionString = ConnectionString 
     Me.TableAdapterManager.UpdateAll(Me.DataSet1) 
    End Sub 




    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     Try 
      Me.UtentesTableAdapter.Fill(Me.DataSet1.utentes) 
     Catch ex As Exception 
      MessageBox.Show("Form2") 
     End Try 



    End Sub 
End Class 

和Form3具有以下控制

enter image description here

用下面的代碼

Public Class Form3 
    Public Sub New(ConnectionString As String) 
     InitializeComponent() 
     Me.TableAdapterManager.Connection.ConnectionString = ConnectionString 
     Me.TableAdapterManager.UpdateAll(Me.DataSet1) 
    End Sub 
    Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Try 
      Me.UtentesTableAdapter.Fill(Me.DataSet1.utentes) 
     Catch ex As Exception 
      MessageBox.Show("Form3") 
     End Try 


    End Sub 

    Private Sub UtentesBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles UtentesBindingNavigatorSaveItem.Click 
     Me.Validate() 
     Me.UtentesBindingSource.EndEdit() 
     Me.TableAdapterManager.UpdateAll(Me.DataSet1) 

    End Sub 
End Class