/ / Como obter a string de conexão que está conectada agora - vb.net, conexão de banco de dados, string de conexão

Como obter a string de conexão que está conectada agora - vb.net, database-connection, connection-string

Como posso obter a string de conexão que agora está conectada ao banco de dados?

Posso obter todas as cadeias de conexão, mas como posso obter qual delas está conectada?

Desde já, obrigado.

Respostas:

0 para resposta № 1

Para conexões que não estão usando o padrãoconexão, por exemplo .SQLEXPRESS o seguinte fornecerá as conexões armazenadas em app.config e um método para rastrear a conexão. No exemplo de formulário estou usando ms-access, mas isso funcionará com sql-server também.

Editar: aqui está um exemplo de código de função completo no site de amostra de código da Microsoft que acabei de criar.

Aulas de apoio

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

Classe de trabalho para obter nomes de conexão, índice e string de conexão

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

Formulário utilizando as classes acima.Nesse caso, há duas conexões armazenadas em app.config. A classe de trabalho é instanciada no nível do formulário para que possamos usá-la para rastrear a string de conexão atual. Opcionalmente, podemos localizar a classe e usar uma variável inteira privada para lembrar a conexão atual. No carregamento do formulário, estou escolhendo qual conexão usar em vez do padrão, armazenar o índice para essa conexão na instância da classe de trabalho, exibir nomes de string de conexão em um ComboBox e expor todas as informações em um DataGridView. Pressionando um botão, mudamos a conexão em tempo de execução enquanto um segundo botão mostra a string de conexão subjacente.

Observe a instrução import, coloquei a classe de trabalho em um projeto de classe, de modo que o projeto de formulário deve ter uma referência a ela seguida pela instrução 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

Screenshot insira a descrição da imagem aqui