Browsing articles tagged with " Runtime"

A vueltas con .NET: Modificar Connection Strings en Runtime

Esto del .NET me parece alucinante, la de cosas que se pueden llegar a hacer de forma rápida y sencilla es enorme. Sin hablar de la cantidad ingente de ejemplos y ayuda que podemos encontrar por Internet. Sin embargo, me he encontrado con un problema.

En una aplicación que estoy haciendo necesito poder leer los datos de diferentes bases de datos en función del dominio en el que se ha autentificado el usuario. Las bases de datos corresponden a diferentes fábricas alrededor del mundo así que necesito poder cambiar el ConnectionString que utilizan los DataSets en tiempo de ejecución.  Después de indagar ésto es lo que he conseguido, espero que alguien le ayude.

Lo primero que debemos hacer es declarar los diferentes ConnectionString que podemos utilizar, en nuestro caso lo haremos dentro de  My Project -> Settings.

mysettings

En mi caso tengo 3 Connection Strings, uno de ellos (ConnectionString) es el que utilizan los diferentes DataSets y los otros dos (SpainConnectionString y ChinaConnectionString) son los diferentes valores que puede tomar la primera variable. En la misma pantalla de Settings le damos a ViewCode y saltaremos al código de la clase Settings  que nos permite utilizar eventos específicos de esa clase.


Namespace My
'This class allows you to handle specific events on the settings class:
' The SettingChanging event is raised before a setting's value is changed.
' The PropertyChanged event is raised after a setting's value is changed.
' The SettingsLoaded event is raised after the setting values are loaded.
' The SettingsSaving event is raised before the setting values are saved.
Partial Friend NotInheritable Class MySettings
Public WriteOnly Property ChangeConnectionString() As String
Set(ByVal Value As String)
My.Settings("ConnectionString") = Value
End Set
End Property
End Class
End Namespace

Éste es el código que modifica el valor de la variable ConnectionString (también se puede utilizar para cambiar culaquier valor de la clase My Setting), ahora debemos llamar a éste proceso con el valor que nos interese.

En nuestro caso miramos el dominio del usuario y el rango de IP’s del usuario.

Private Sub GetDomain(ByVal HostName As String)
'Buscamos el dominio al que corresponde la ip que tenemos asignada,
'no el dominio al que nos hemos
'logueado desde Windows
Dim Direcciones As IPAddress() = Dns.GetHostAddresses(HostName)
'Recorremos todos los posibles dominios y cargamos el portal del dominio correspondiente
Select Case Mid(Mid(Direcciones(0).ToString(), 9), 1, InStr(Mid(Direcciones(0).ToString(), 9), ".") - 1)
Case My.Settings.SPAIN_IP
My.Settings.ChangeConnectionString = My.Settings.SPAINConnectionString
Case My.Settings.CHINA_IP
My.Settings.ChangeConnectionString = My.Settings.CHINAConnectionString
Case Else
'Si llegamos aqui es que no estamos en ningun dominio conocido, por tanto cerramos el portal
End Select
End Sub

Espero que os sea de ayuda.