Ver Mensaje Individual
  #6 (permalink)  
Antiguo 07/03/2014, 19:50
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Eficiencia a la hora de programar

Hola,

Básicamente en Visual Basic se haría de la siguiente forma, tendrías que adaptar los conceptos a C#, que increiblemente no me di cuenta que estabas hablando de C# hasta cuando ya lo había escrito.

Cita:
Iniciado por MarkiiAk Ver Mensaje
... el messagebox era solo un ejemplo pues burdo, para no ser tan largo en la pregunta, ...
Tendrías que haber puesto un ejemplo que represente exactamente el objetivo que deseas obtener, un MessageBox y un ConnectionString son diferentes desde el punto de vista de su manejo.

El MessageBox puede ir localizado en diferentes idiomas y debería cargarse de una librería de recursos que pueda ser cambiada por otro idioma dependiendo de la configuración del usuario o del sistema. El ConnectionString debería poder ser cambiado dependiendo de un archivo de configuración.

Cita:
Iniciado por MarkiiAk Ver Mensaje
Código:
System.Data.SqlClient.SqlConnection con;

public void conectarbd()
        {
            con = new SqlConnection();
            con.ConnectionString = "Integrated Security=SSPI;Initial Catalog=Empleados;Data Source=CRISTINA\\SQLEXPRESS";
            try
            {
                con.Open();

            }
            catch (Exception)
            {
                MessageBox.Show("Conexion Fallida");
            }
        }
El ejemplo sigue siendo bastante malo, si cambias la base de datos de servidor tienes que cambiar todas la cadenas de conexión donde lo hayas copiado "hard coded". No voy a mencionar lo de la seguridad y lo del try catch por ser deficiencias suficientemente evidentes.

Una manera de leer tu archivo de configuración podría ser la siguiente, o algo parecido, esto funcionaba en Visual Basic 2008, tendrías que adaptarlo a C#:

Código:
    Public globalConnectionString As String

    Private Function ReadXMLConfiguration(ByVal Value As String) As String
        Dim confAppSettings As System.Configuration.AppSettingsReader = New System.Configuration.AppSettingsReader()
        Return CType(configurationAppSettings.GetValue(Value, GetType(System.String)), String)
    End Function

    Public Sub Main()
        globalConnectionString = ReadXMLConfig("TheSqlConnection.ConnectionString")
    End Sub
Ese método o función lee cualquier configuración en XML que esté grabada en el archivo app.settings de tu aplicación. Después podrías leer tu cadena de configuración y guardarla en una variable global en un módulo.

Cita:
Iniciado por MarkiiAk Ver Mensaje
... entonces tuve que volver a escribir la cadena de conexion completa en el segundo form en vez de solo mandarla a llamar, esto como lo puedo evitar, pues me esta generando codigo repetititvo. ...
En Visual Basic lo normal es crear una variable global a nivel de toda la aplicación en un Module con visibilidad Public. Eso es normal porque la variable no va a variar (sería parecido una constante) después de haber sido inicializada en un Main; por ser un ConnectionString, en otro tipo de variables posiblemente no sea adecuado una variable global.

En decir, es una variable que después de haber sido inicializada no va a cambiar, parecido a una constante.

Cita:
Iniciado por javidotnet Ver Mensaje
... Pero no es aconsejable programar así, en lugar de esto, los que saben aconsejan usar capas. ...
Interesante descripción de la programación en capas, aunque básicamente lo que MarkiiAk deseaba es una variable publica global inicializada en un Main.

Lo que si es cierto es que en una aplicación por capas solamente se requiere el ConnectionString en la capa de Acceso a datos y nada más. También crear la conexión o la cadena de conexión como atributo de una clase, si esa clase no se dedica exlusivamente a conexiones, estaría mal.

Saludos,

Última edición por HackmanC; 07/03/2014 a las 19:58 Razón: 2008