Conexion a Base de Datos

26/11/2003 - 01:42 por mickro | Informe spam
estoy desarrollando una aplicacion MDI que se conecta visualmente a una base
de datos MySQL/MS SQL Server y muestra los datos en un DataGrid. Cuando
abro el fomulario que se conecta a la base de datos, este tarda mucho en
abrirse, pienso que es porque en ese momento se esta estebleciendo la
conexion con la base de datos y llenando el dataset.
Como puedo hacer para que la conexion se realize al iniciarse la aplicacion
y no al momento de abrir ese formulario secundario?.

Intente poner el componente mySqlConnection en el formulario principal de la
aplicacion (formulario padre), pero no puedo acceder a el desde el
componente mySqlCommand, que esta en otro formulario, para establecer cual
es la conexion de ese comando (SelectCommad)

Preguntas similare

Leer las respuestas

#1 Javier Loria
26/11/2003 - 15:50 | Informe spam
Hola:
Si la primera vez que ejecutas el formulario tarda mucho, y si lo
cierras y lo vuelves a abrir es bien rapido, es casi seguro que sea la
conexion. Es "normal" que tarde 10/20 segundos incluso en redes locales.
Si quieres que este la conexion este abierta previa al formulario,
tienes varias alternativas.
a) Si usas el mismo "Conexion String" para toda la aplicacion, (lo cual
es deseable), simplemente en el codigo de inicio abres y cierras una
conexion. Esta conexion NO necesita ser la misma del formulario, solamente
necesita tener exactamente la misma sentencia de conexion. Esto hara el
inicio mas lento el inicio, pero los demas formularios que usen la misma
sentencia de conexion lo haran mas rapido, por una habilidad de OLE-DB
llamada "Conexion Pooling".
b) Si quieres compartir el objeto Connection entre todos los
formularios, puedes usar una clase y definir una variable Connection como
static, y podras usarla como si fuera una variable global.
Saludos,

Javier Loria
Costa Rica
mickro escribio:
Mostrar la cita
#2 mickro
27/11/2003 - 00:55 | Informe spam
Me podrias dar un ejemplo de como implementar la primera opcion, o darme mas
detalles?
"Javier Loria" escribió en el mensaje
news:%23V%
Mostrar la cita
cual
Mostrar la cita
#3 Javier Loria
27/11/2003 - 04:35 | Informe spam
Hola:
Con gusto. Asumo que usas Visual Studio, y tal vez montas una prueba.
= Inicia un proyecto de Windows,
Agrega un formulario (Form2).
En el Form2 arrastras alguna de las tablas de Explorador de Servidores
(eso te deja 2 nuevas instancias sqlConnection1, y sqldataadapter1).
Sobre el SQLDataAdapter haces clic derecho y seleccionas generar un
DataSet. Dejas el nombre default y la opcion de agregar al disenador marcada
y OK.
Agregas un DataGrid.
En las propiedades del DataGrid seleccionas el DataSet11 como DataSource
y la Tabla como DataMember.
Haces doble clic en el formulario 2 y en el Load escribes algo como:
sqlDataAdapter1.Fill(DataSet11);
Luego en el Formulario1, agregas un boton.
hacer doble clic sobre el boton y agregas:
Form2 frm=new Form2();
frm.Show();
= Si ejecutas la aplicacion veras que una vez que haces clic sobre el
boton tardara 10/20 segundos para lograr abrir el formulario y llenar el
DataSet y desplegar el Grid. En realidad el que esta tardando mucho es el
OPEN que esta incluido en en Adaptador porque es la primera vez que se
conecta. Las siguientes veces es bastante mas rapido.
Prueba ahora esto:
Selecciona el Formulario2 y marca el sqlConecction1, clic derecho
copiar.
Selecciona el Formulario1 y haz el pegar (esto te agrega una conexion
nueva).
Has doble clic sobre el formulario y en el evento load escribe.
sqlConnection1.Open();
sqlConnection1.Close();
Si ejecutas el programa veras que ahora el primer formulario es muy
lento y el segundo es muy rapido. Esto es poque ya hubo una conexion previa
y el OLEDB provider mantienen un "Conecction Pool" para reutilizarlas.
Claro que eso mismo lo hubieras podido lograr en el evento y sin
necesidad de copiar y pegar la conexion simplemente:
static void Main()
{
SqlConnection conn=new SqlConnection("integrated security=SSPI;"+
"data source=.;persist security info=False;initial
catalog=Northwind");
conn.Open();
conn.Close();
conn.Dispose();
Application.Run(new Form1());
}
= Espero te sirva,


Javier Loria
Costa Rica

mickro escribio:
Mostrar la cita
#4 mickro
27/11/2003 - 06:58 | Informe spam
Hola:
Ante todo gracias por las respuestas. Hice lo que tu me dijiste pero
el formulario 2 tarda lo mismo en abrirse. Probe copiando todos los
componentes de la conexion al formulario 1 (connecion, command, dataadapter
y dataset) y llene el adaptador en el evendo Load del formulario 1. Luego al
apretar el boton para que se cargue el formulario 2, este se abrio mas
rapido. Pero si lo aprieto nuevamente, otra instancia del formulario 2 se
abre mas rapido aun que la primera instancia de dicho formulario.

entonces, por que tarda en abrirse el formulario???es por la conexion
con la base de datos???...o es porque esta llenando el dataset????


saludos

"Javier Loria" escribió en el mensaje
news:
Mostrar la cita
marcada
Mostrar la cita
DataSource
Mostrar la cita
previa
Mostrar la cita
#5 Javier Loria
27/11/2003 - 09:56 | Informe spam
Hola:
Entonces tu problema no es la conexion :)
Prodia ser el llenado de los datos o el formulario, hay alguno de los 2
que sea particularmente pesado?
Si es un formulario que es critico podrias leerlo y no ensenarlo. O sea
declarar una variable en el Formulario MDI Padre, crear el nuevo formulario
Hijo, sin ensenarlo y en los menus o barras para activar el formulario hijo
haces unicamente el SHOW.
Suerte,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

mickro escribio:
Mostrar la cita
Ads by Google
Search Busqueda sugerida