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:
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)
Respuesta Responder a este mensaje
#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%
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:
> 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)


Respuesta Responder a este mensaje
#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:
Me podrias dar un ejemplo de como implementar la primera opcion, o
darme mas detalles?
"Javier Loria" escribió en el mensaje
news:%23V%
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:
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)
Respuesta Responder a este mensaje
#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:
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:
> Me podrias dar un ejemplo de como implementar la primera opcion, o
> darme mas detalles?
> "Javier Loria" escribió en el mensaje
> news:%23V%
>> 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:
>>> 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)


Respuesta Responder a este mensaje
#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:
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:
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:
Me podrias dar un ejemplo de como implementar la primera opcion, o
darme mas detalles?
"Javier Loria" escribió en el mensaje
news:%23V%
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:
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)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida