/ /現在接続されている接続文字列を取得する方法-vb.net、database-connection、connection-string

現在接続されている接続文字列を取得する方法-vb.net、database-connection、connection-string

現在データベースに接続されている接続文字列を取得するにはどうすればよいですか?

すべての接続文字列を取得できますが、どの接続文字列を取得するにはどうすればよいですか?

前もって感謝します。

回答:

回答№1は0

デフォルトを使用していない接続の場合接続例: .SQLEXPRESSは、app.configに保存されている接続と、接続を追跡する方法を提供します。フォームの例では、ms-accessを使用していますが、これはsql-serverでも機能します。

編集これは完全に機能するコード例です 私が作成したばかりのMicrosoftのコードサンプルWebsuteで。

支援クラス

Public Class ConfigItem
Public Property Data As System.Configuration.ConnectionStringSettings
Public Property Index As Integer
End Class
Public Class ConnectionInfo
Public Property Name As String
Public Property ConnectionString As String
Public Property Index As Integer
End Class

接続名、インデックス、接続文字列を取得するワーカークラス

Imports System.Configuration
""" <summary>
""" Must add a reference to System.Configuration
""" to this project.
""" </summary>
""" <remarks></remarks>
Public Class ProjectConnections
""" <summary>
""" Storage for connections
""" </summary>
""" <value></value>
""" <returns></returns>
""" <remarks></remarks>
Public Property Items As New List(Of ConnectionInfo)
""" <summary>
""" Used to remember the current connection
""" </summary>
""" <value></value>
""" <returns></returns>
""" <remarks></remarks>
Public Property CurrentConnectionIndex As Integer

Private RemoveThis As String = ""
Public Sub New()
" look at parent assembly as this class is in a class project used by a
" forms project
RemoveThis = Reflection.Assembly.GetEntryAssembly.GetName.Name & ".My.MySettings."
" get connection data into the Items propery of this class
GetInformation()
End Sub
""" <summary>
""" Traverse through connection strings in app.config, exclude local sql-server connection
""" </summary>
""" <remarks>
""" tested with ms-access, sql-server attached and server based
""" </remarks>
Private Sub GetInformation()
ConfigurationManager.ConnectionStrings.Cast(Of ConnectionStringSettings)().Select(
Function(item, index) New ConfigItem With {.Data = item, .Index = index}).ToList _
.ForEach(
Sub(ConfigItem)
If ConfigItem.Data.Name.Contains(".") Then
Items.Add(
New ConnectionInfo With
{
.Name = ConfigItem.Data.Name.Replace(RemoveThis, ""),
.ConnectionString = ConfigItem.Data.ConnectionString,
.Index = ConfigItem.Index
})
End If
End Sub)
End Sub
End Class

上記のクラスを利用したフォーム。 この場合、app.configには2つの接続が保存されています。ワーカークラスはフォームレベルでインスタンス化されるため、現在の接続文字列を追跡するために使用できます。オプションで、クラスをローカライズし、プライベート整数変数を使用して現在の接続を記憶することができます。フォームの読み込みでは、デフォルトではなく使用する接続を選択し、その接続のインデックスをワーカークラスインスタンスに格納し、接続文字列名をComboBoxに表示し、すべての情報をDataGridViewに公開します。ボタンを押すと、実行時に接続が変更され、2番目のボタンは基になる接続文字列を表示します。

importステートメントに注意してください。workerクラスをクラスプロジェクトに配置したので、フォームプロジェクトにはそれへの参照が必要であり、その後にimportステートメントが続きます。

Imports ConfigurationLibrary

Public Class Form1
Private connections As ProjectConnections = New ProjectConnections()
Private Sub CustomersBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) _
Handles CustomersBindingNavigatorSaveItem.Click

Me.Validate()
Me.CustomersBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.Database1DataSet)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
" here I am loading a connection other than the default
CustomersTableAdapter.Connection.ConnectionString = connections.Items(1).ConnectionString
" for keeping track later as in cmdGetConnection.Click
connections.CurrentConnectionIndex = 1
Me.CustomersTableAdapter.Fill(Me.Database1DataSet.Customers)
cboConnections.DataSource = connections.Items
cboConnections.DisplayMember = "Name"
cboConnections.SelectedIndex = 1

dgvInformation.AutoGenerateColumns = False
dgvInformation.DataSource = connections.Items
CustomersDataGridView.ExpandColumns()
dgvInformation.ExpandColumns()
End Sub
Private Sub cmdSetConnection_Click(sender As Object, e As EventArgs) Handles cmdSetConnection.Click
Dim OrdinalIndex As Integer = CType(cboConnections.SelectedItem, ConnectionInfo).Index - 1
CustomersTableAdapter.Connection.Close()
CustomersTableAdapter.Connection.ConnectionString = connections.Items(OrdinalIndex).ConnectionString
CustomersTableAdapter.Connection.Open()
CustomersTableAdapter.Fill(Me.Database1DataSet.Customers)
cboConnections.SelectedIndex = OrdinalIndex
End Sub

Private Sub cmdGetConnection_Click(sender As Object, e As EventArgs) Handles cmdGetConnection.Click
Dim sb As New System.Text.StringBuilder
sb.AppendLine(cboConnections.Text)
sb.AppendLine(connections.Items(connections.CurrentConnectionIndex).ConnectionString)

MessageBox.Show(sb.ToString)
End Sub
End Class

スクリーンショット ここに画像の説明を入力