/ / Як отримати рядок підключення, який підключений прямо зараз - vb.net, підключення до бази даних, рядок підключення

Як отримати рядок з'єднання, який підключений зараз - vb.net, підключення до бази даних, рядок з'єднання

Як я можу отримати рядок підключення, який зараз підключений до бази даних?

Я можу отримати всі рядки з'єднання, але як я можу отримати, який з них підключений?

Заздалегідь спасибі.

Відповіді:

0 для відповіді № 1

Для з’єднань, які не використовують за замовчуваннямпідключення напр. .SQLEXPRESS наступне дасть вам з'єднання, збережені в app.config, і спосіб відстеження з'єднання. У прикладі форми я використовую ms-access, але це також буде працювати з sql-сервером.

Редагувати: ось приклад повністю функціонального коду у зразку коду Microsoft, який я щойно створив.

Допоміжні заняття

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 зберігаються два з'єднання. Клас робітник створюється на рівні форми, тому ми можемо використовувати його для відстеження поточного рядка підключення. За бажанням ми могли б локалізувати клас і використати приватну цілу змінну, щоб запам'ятати поточне з'єднання. Під час завантаження форми я вибираю, яке з’єднання використовувати, а не за замовчуванням, зберігаю індекс для цього з’єднання в екземплярі робочого класу, відображаю імена рядків підключення в ComboBox і виставляю всю інформацію в DataGridView. Натискаючи кнопку, ми змінюємо з'єднання під час виконання, тоді як друга кнопка показує основний рядок з'єднання.

Зверніть увагу на імпортну заяву, я помістив робочий клас у проект класу, тому проект форми повинен мати посилання на нього, а потім оператор імпорту.

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

Скріншот введіть опис зображення тут