/ / Cómo obtener la cadena de conexión que está conectada en este momento - vb.net, database-connection, connection-string

Cómo obtener la cadena de conexión que está conectada en este momento - vb.net, conexión de base de datos, cadena de conexión

¿Cómo puedo obtener la cadena de conexión que ahora está conectada a la base de datos?

Puedo obtener todas las cadenas de conexión, pero ¿cómo puedo obtener cuál está conectada?

Gracias por adelantado.

Respuestas

0 para la respuesta № 1

Para conexiones que no utilizan el valor predeterminadoconexión, p. ej. .SQLEXPRESS lo siguiente le dará las conexiones almacenadas en app.config y un método para rastrear la conexión. En el ejemplo de formulario, estoy usando ms-access, pero esto también funcionará con sql-server.

Editar: aquí hay un ejemplo de código completamente funcional en el sute web de muestra de código de Microsoft que acabo de crear.

Clases de apoyo

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

Clase trabajadora para obtener nombres de conexión, índice y cadena de conexión

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

Formulario utilizando las clases anteriores.En este caso, hay dos conexiones almacenadas en app.config. Se crea una instancia de la clase trabajadora a nivel de formulario para que podamos usarla para rastrear la cadena de conexión actual. Opcionalmente, podríamos localizar la clase y usar una variable entera privada para recordar la conexión actual. En la carga del formulario, elijo qué conexión usar en lugar de la predeterminada, almacené el índice para esa conexión en la instancia de la clase de trabajador, muestro los nombres de las cadenas de conexión en un ComboBox y expongo toda la información en un DataGridView. Al presionar un botón, cambiamos la conexión en tiempo de ejecución, mientras que un segundo botón muestra la cadena de conexión subyacente.

Tenga en cuenta la declaración de importación, coloqué la clase de trabajador en un proyecto de clase, por lo que el proyecto de formulario debe tener una referencia y luego seguir la declaración de importación.

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

Captura de pantalla enter image description here