I'm doing a project in visual basic and devexpress.
When I compile the software in visual studio, everything works fine, but when I run the program installed on the pc and I want to access a dashboard, I get the following error:
No se puede conectar a la base de datos. Ver detalles abajo. Mensaje error: no se ha inicializado la propiedad connectionString
Then I close the program, I open it and I perform the same action of accessing the dashboard and everything works fine. Could you help me?
I leave the code in order of execution.
When I start the software, it asks me to enter the name of the server and the instance where the databases are in SQLServer. This function saves the data for a connection in an XML file.
Private Sub Guardar_Servidor_Click(sender As Object, e As EventArgs) Handles Guardar_Servidor.Click
Dim settings As New XmlWriterSettings()
settings.Indent = True
If (Check.Checked = True) Then
'Seguridad SQL SERVER
If (text_Usuario.Text = "" Or text_Password.Text = "") Then
MsgBox("Debe llenar los campos de usuario y contraseña")
Else
Try
Dim dir As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
'Se crea el directorio donde se guardaran las opciones
CreateDirectory(dir & "\Kimun")
Dim filePermissions = New FileIOPermission(FileIOPermissionAccess.AllAccess, dir & "\Kimun\config.xml")
filePermissions.Demand()
'Directiorio donde se guardara el archivo
Dim XmlWrt As XmlWriter = XmlWriter.Create(dir & "\Kimun\config.xml", settings)
With XmlWrt
'Declaracion por defecto XML
.WriteStartDocument()
'Comentario del XML
.WriteComment("XML Configuracion Kimun")
'Encabezado raiz XML
.WriteStartElement("Configuracion")
'Se inicia la configuracion
.WriteStartElement("Parametros")
'Parametros del nodo
.WriteStartElement("Servidor")
.WriteString(Nom_Servidor.Text)
.WriteEndElement()
.WriteStartElement("Usuario")
.WriteString(text_Usuario.Text)
.WriteEndElement()
.WriteStartElement("Password")
.WriteString(text_Password.Text)
.WriteEndElement()
.WriteStartElement("Correo")
.WriteString("")
.WriteEndElement()
'Termina la configuracion
.WriteEndElement()
'Se cierra XMLTextWriter
.WriteEndDocument()
.Close()
End With
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Error al guardar el archivo XML")
End Try
PanelDeControl.icono_notificacion.ShowBalloonTip(5000, "Notificación", "Se ha creado el archivo XML.", ToolTipIcon.Info)
crear_conexiones()
Me.Close()
End If
Else
'Seguridad Windows
text_Usuario.Text = ""
text_Password.Text = ""
Try
Dim dir As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
'Se crea el directorio donde se guardaran las opciones
CreateDirectory(dir & "\Kimun")
Dim filePermissions = New FileIOPermission(FileIOPermissionAccess.AllAccess, dir & "\Kimun\config.xml")
filePermissions.Demand()
'Directiorio donde se guardara el archivo
Dim XmlWrt As XmlWriter = XmlWriter.Create(dir & "\Kimun\config.xml", settings)
With XmlWrt
'Declaracion por defecto XML
.WriteStartDocument()
'Comentario del XML
.WriteComment("XML Configuracion Kimun")
'Encabezado raiz XML
.WriteStartElement("Configuracion")
'Se inicia la configuracion
.WriteStartElement("Parametros")
'Parametros del nodo
.WriteStartElement("Servidor")
.WriteString(Nom_Servidor.Text)
.WriteEndElement()
.WriteStartElement("Usuario")
.WriteString(text_Usuario.Text)
.WriteEndElement()
.WriteStartElement("Password")
.WriteString(text_Password.Text)
.WriteEndElement()
.WriteStartElement("Correo")
.WriteString("")
.WriteEndElement()
'Termina la configuracion
.WriteEndElement()
'Se cierra XMLTextWriter
.WriteEndDocument()
.Close()
End With
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Error al guardar el archivo XML")
End Try
crear_conexiones()
Me.Close()
End If
End Sub
Then go to the function create_connections ()
Public Sub crear_conexiones()
Try
Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
Dim connectionStringsSection As ConnectionStringsSection = DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
Dim section As ConnectionStringsSection = config.ConnectionStrings
Dim conexion As New Conectar_Servidor
leer_XML() 'Funcion que lee el xml e inserta los datos en variables globales que son servidor, usuario, password
'Creamos una nueva cadena de conexion
Dim cadena_conexion_controlProduccion As New ConnectionStringSettings()
Dim cadena_conexion_eTata As New ConnectionStringSettings()
'Asignamos el nombre de la cadena de conexion'
cadena_conexion_controlProduccion.Name = "conectar_controlProduccion"
cadena_conexion_eTata.Name = "conectar_eTata"
If (conexion.Check.Checked = True) Then
'Damos la cadena de conexion'
cadena_conexion_controlProduccion.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=ControlProduccion;User ID= " & Usuario & ";Password= " & Password
cadena_conexion_eTata.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=eTata;User ID= " & Usuario & ";Password= " & Password
Else
'Damos la cadena de conexion'
cadena_conexion_controlProduccion.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=ControlProduccion;Integrated Security=True"
cadena_conexion_eTata.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=eTata;Integrated Security=True"
End If
'Nombre del Proveedor de datos incariable'
cadena_conexion_controlProduccion.ProviderName = "System.Data.SqlClient"
cadena_conexion_eTata.ProviderName = "System.Data.SqlClient"
'Añadimes la nueva cadena de conexion al objeto connectionString section'
connectionStringsSection.ConnectionStrings.Add(cadena_conexion_controlProduccion)
connectionStringsSection.ConnectionStrings.Add(cadena_conexion_eTata)
conectar_controlProduccion = New SqlConnection(cadena_conexion_controlProduccion.ConnectionString)
conectar_eTata = New SqlConnection(cadena_conexion_eTata.ConnectionString)
'Guardamos los cambios en el archivo de configuracion'
config.Save(ConfigurationSaveMode.Modified, True)
If (test_Conection(cadena_conexion_controlProduccion.ConnectionString) = True) Then
Panel_Principal.estado_controlProduccion.ForeColor = Color.Green
Panel_Principal.estado_controlProduccion.Text = "Conectado"
abrir_controlProduccion()
abrir_controlProduccion2()
Else
Panel_Principal.estado_controlProduccion.ForeColor = Color.Red
Panel_Principal.estado_controlProduccion.Text = "No Conectado"
PanelDeControl.icono_notificacion.ShowBalloonTip(5000, "Error", "No se ha podido establecer conexión con la base de datos control Producción", ToolTipIcon.Warning)
Conectar_Servidor.Show()
End If
If (test_Conection(cadena_conexion_eTata.ConnectionString) = True) Then
Panel_Principal.estado_eTata.ForeColor = Color.Green
Panel_Principal.estado_eTata.Text = "Conectado"
abrir_eTata()
abrir_etata2()
Else
Panel_Principal.estado_eTata.ForeColor = Color.Red
Panel_Principal.estado_eTata.Text = "No Conectado"
PanelDeControl.icono_notificacion.ShowBalloonTip(5000, "Error", "No se ha podido establecer conexión con la base de datos eTata", ToolTipIcon.Warning)
Conectar_Servidor.Show()
End If
Catch
PanelDeControl.icono_notificacion.ShowBalloonTip(5000, "Error", "No se ha podido establecer conexión con las bases de datos", ToolTipIcon.Warning)
Panel_Principal.estado_controlProduccion.ForeColor = Color.Red
Panel_Principal.estado_controlProduccion.Text = "No Conectado"
Panel_Principal.estado_eTata.ForeColor = Color.Red
Panel_Principal.estado_eTata.Text = "No Conectado"
Conectar_Servidor.Show()
End Try
End Sub
the connections are opened (when the program opens a second time, it goes straight to this part)
Sub abrir_controlProduccion2()
Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
Dim connectionStringsSection As ConnectionStringsSection = DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
Dim conexion As New Conectar_Servidor
leer_XML()
Try
'Creamos una nueva cadena de conexion
Dim cadena_conexion_controlProduccion As New ConnectionStringSettings()
'Asignamos el nombre de la cadena de conexion
cadena_conexion_controlProduccion.Name = "conectar_controlProduccion"
If (conexion.Check.Checked = True) Then
'Damos la cadena de conexion
cadena_conexion_controlProduccion.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=ControlProduccion;User ID= " & Usuario & ";Password= " & Password
conectar_controlProduccion = New SqlConnection("Data Source=" & Servidor & ";Initial Catalog=ControlProduccion;User ID= " & Usuario & ";Password= " & Password)
Else
'Damos la cadena de conexion
cadena_conexion_controlProduccion.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=ControlProduccion;Integrated Security=True"
conectar_controlProduccion = New SqlConnection("Data Source=" & Servidor & ";Initial Catalog=ControlProduccion;Integrated Security=True")
End If
'Nombre del Proveedor de datos incariable
cadena_conexion_controlProduccion.ProviderName = "System.Data.SqlClient"
ConnectionStringsSection.ConnectionStrings.Add(cadena_conexion_controlProduccion)
conectar_controlProduccion = New SqlConnection(cadena_conexion_controlProduccion.ConnectionString)
'Guardamos los cambios en el archivo de configuracion
config.Save(ConfigurationSaveMode.Full, True)
conectar_controlProduccion.Open()
Catch
Panel_Principal.estado_controlProduccion.ForeColor = Color.Red
Panel_Principal.estado_controlProduccion.Text = "No Conectado"
Conectar_Servidor.Show()
End Try
End Sub
Sub abrir_etata2()
Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
Dim connectionStringsSection As ConnectionStringsSection = DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
Dim conexion As New Conectar_Servidor
leer_XML()
Try
Dim cadena_conexion_eTata As New ConnectionStringSettings()
cadena_conexion_eTata.Name = "conectar_eTata"
If (conexion.Check.Checked = True) Then
cadena_conexion_eTata.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=eTata;User ID= " & Usuario & ";Password= " & Password
conectar_eTata = New SqlConnection("Data Source=" & Servidor & ";Initial Catalog=eTata;User ID= " & Usuario & ";Password= " & Password)
Else
cadena_conexion_eTata.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=eTata;Integrated Security=True"
conectar_eTata = New SqlConnection("Data Source=" & Servidor & ";Initial Catalog=eTata;Integrated Security=True")
End If
cadena_conexion_eTata.ProviderName = "System.Data.SqlClient"
connectionStringsSection.ConnectionStrings.Add(cadena_conexion_eTata)
conectar_eTata = New SqlConnection(cadena_conexion_eTata.ConnectionString)
config.Save(ConfigurationSaveMode.Full, True)
conectar_eTata.Open()
Catch
Panel_Principal.estado_eTata.ForeColor = Color.Red
Panel_Principal.estado_eTata.Text = "No Conectado"
Conectar_Servidor.Show()
End Try
End Sub
Finally, I press the button to open the dashboard and in the part of your code I have these lines.
Public Sub New()
InitializeComponent()
abrir_controlProduccion2()
Try
If (conectar_controlProduccion.State = ConnectionState.Closed) Then
conectar_controlProduccion.Open()
End If
Me.DashboardSqlDataSource1.ConnectionName = "conectar_controlProduccion"
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Error al cargar el dashboard.")
End Try
End Sub
This happens to me every time I open a dashboard.
It is worth mentioning that I made the connections of the dashboards in that way, because my software has the option to connect to different servers. (If someone has a better solution than what I have here, I would appreciate it)
Thanks in advance!