Conexión SQL global en segundo plano

Estoy intentando crear una pequeña aplicación de Windows Forms con .Net 4.0

Parte de mi programa necesita conectarse a una base de datos, pero cuando hago lo siguiente:

SqlConnection conn = new SqlConnection(connectionString);

try
{
    conn.Open();
} 

....

Todo el programa se cuelga hasta que se establece la conexión. Lo que quiero hacer es poder hacer / abrir esta conexión, supongo, en segundo plano. Por lo tanto, el programa seguirá respondiendo a los clics en los botones, etc.

Además, ¿cómo puedo hacer que esta conexión única esté disponible globalmente para mi programa?

Gracias de antemano.

preguntado el 27 de agosto de 11 a las 14:08

Informe al usuario que se está conectando a la base de datos, tal vez con una de esas barras de progreso infinitas, y use el cursor de espera. -

2 Respuestas

Debe abordar el problema de por qué se tarda tanto en obtener una conexión. Suena más como si quisieras tratar el los síntomas que es que cuelga tu aplicación.

¿Cómo puedo hacer que esta conexión única esté disponible globalmente para mi programa?

Esta es una mala práctica. Las conexiones a las bases de datos deben mantenerse abiertas para el más corto duración posible. Adquiera una conexión justo antes de que necesite usarla, luego ciérrela tan pronto como haya terminado. Dado que está utilizando C #, puede aprovechar las using bloque que gestiona los recursos disponibles para usted:

using (var conn = new SqlConnection(connectionString)) {
    try {
        conn.Open();
        // do things here...
    }
    catch (Exception) {
    }
}

Incluso si quisiera hacer algo como abrir la conexión de forma asincrónica, ¿para qué serviría? Sus usuarios tendrían una interfaz de usuario más receptiva pero aún no podrían hacer nada en la aplicación hasta que se estableciera la conexión.

Respondido 27 ago 11, 18:08

No se sugiere el caso que desea hacer porque debe realizar las operaciones con db lo más rápido posible.

Respondido 27 ago 11, 18:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.