Cursores o conjunto de datos

27/08/2004 - 18:16 por Bárbara González | Informe spam
Saludos al grupo

Estoy aprendiendo y a la vez desarrollando una aplicacion en C# con
SQLSERVER pero he tenido problemas de rendimiento y el mayor numero de
consejos que recibo es el de no usar CURSORES y en vez de ellos use CONJUNTO
DE DATOS, bueno el caso es que no se que es cada cosa, asi que publico una
seccion de mi codigo a ver que estoy usando o un cursor o un conjunto de
datos.

GRacias

System.Data.SqlClient.SqlConnection x_coneccion = new
System.Data.SqlClient.SqlConnection(coneccion);

System.Data.SqlClient.SqlCommand x_comando = new
System.Data.SqlClient.SqlCommand(

"SELECT * FROM _usuarios " +

"WHERE (nick = @Nick) AND (clave = @Clave)",x_coneccion);

x_comando.Parameters.Add("@Nick" , SqlDbType.VarChar,20).Value = nick;

x_comando.Parameters.Add("@Clave", SqlDbType.VarChar,20).Value = clave;

x_coneccion.Open();

System.Data.SqlClient.SqlDataReader x_data = x_comando.ExecuteReader();

if (x_data.Read())

{

x_resultado.id = x_data.GetSqlInt32(0).Value;

x_resultado.nombre = x_data.GetSqlString(1).Value;

x_resultado.nick = x_data.GetSqlString(2).Value;

x_resultado.clave = x_data.GetSqlString(3).Value;

x_resultado.vence = x_data.GetSqlDateTime(4).Value;

x_resultado.estado = x_data.GetSqlString(5).Value;

x_resultado.nc = x_nc.Nc(x_data.GetSqlString(6).Value);

}



Bye

BG

Preguntas similare

Leer las respuestas

#1 Vyacheslav Popov
27/08/2004 - 19:27 | Informe spam
Hola Bárbara

Sin duda alguna estas usando cursor, SqlDataReader, ya es unidireccional.
El conjunto de datos es DataSet.
Saludos

"Bárbara González" escribió en el mensaje
news:eFS$
Saludos al grupo

Estoy aprendiendo y a la vez desarrollando una aplicacion en C# con
SQLSERVER pero he tenido problemas de rendimiento y el mayor numero de
consejos que recibo es el de no usar CURSORES y en vez de ellos use


CONJUNTO
DE DATOS, bueno el caso es que no se que es cada cosa, asi que publico una
seccion de mi codigo a ver que estoy usando o un cursor o un conjunto de
datos.

GRacias

System.Data.SqlClient.SqlConnection x_coneccion = new
System.Data.SqlClient.SqlConnection(coneccion);

System.Data.SqlClient.SqlCommand x_comando = new
System.Data.SqlClient.SqlCommand(

"SELECT * FROM _usuarios " +

"WHERE (nick = @Nick) AND (clave = @Clave)",x_coneccion);

x_comando.Parameters.Add("@Nick" , SqlDbType.VarChar,20).Value = nick;

x_comando.Parameters.Add("@Clave", SqlDbType.VarChar,20).Value = clave;

x_coneccion.Open();

System.Data.SqlClient.SqlDataReader x_data = x_comando.ExecuteReader();

if (x_data.Read())

{

x_resultado.id = x_data.GetSqlInt32(0).Value;

x_resultado.nombre = x_data.GetSqlString(1).Value;

x_resultado.nick = x_data.GetSqlString(2).Value;

x_resultado.clave = x_data.GetSqlString(3).Value;

x_resultado.vence = x_data.GetSqlDateTime(4).Value;

x_resultado.estado = x_data.GetSqlString(5).Value;

x_resultado.nc = x_nc.Nc(x_data.GetSqlString(6).Value);

}



Bye

BG


Respuesta Responder a este mensaje
#2 Bárbara González
27/08/2004 - 19:49 | Informe spam
Genial. Gracias.

Bye
BG

"Vyacheslav Popov" escribió en el mensaje
news:u2f%
Hola Bárbara

Sin duda alguna estas usando cursor, SqlDataReader, ya es unidireccional.
El conjunto de datos es DataSet.
Saludos

"Bárbara González" escribió en el mensaje
news:eFS$
> Saludos al grupo
>
> Estoy aprendiendo y a la vez desarrollando una aplicacion en C# con
> SQLSERVER pero he tenido problemas de rendimiento y el mayor numero de
> consejos que recibo es el de no usar CURSORES y en vez de ellos use
CONJUNTO
> DE DATOS, bueno el caso es que no se que es cada cosa, asi que publico


una
> seccion de mi codigo a ver que estoy usando o un cursor o un conjunto de
> datos.
>
> GRacias
>
> System.Data.SqlClient.SqlConnection x_coneccion = new
> System.Data.SqlClient.SqlConnection(coneccion);
>
> System.Data.SqlClient.SqlCommand x_comando = new
> System.Data.SqlClient.SqlCommand(
>
> "SELECT * FROM _usuarios " +
>
> "WHERE (nick = @Nick) AND (clave = @Clave)",x_coneccion);
>
> x_comando.Parameters.Add("@Nick" , SqlDbType.VarChar,20).Value = nick;
>
> x_comando.Parameters.Add("@Clave", SqlDbType.VarChar,20).Value = clave;
>
> x_coneccion.Open();
>
> System.Data.SqlClient.SqlDataReader x_data = x_comando.ExecuteReader();
>
> if (x_data.Read())
>
> {
>
> x_resultado.id = x_data.GetSqlInt32(0).Value;
>
> x_resultado.nombre = x_data.GetSqlString(1).Value;
>
> x_resultado.nick = x_data.GetSqlString(2).Value;
>
> x_resultado.clave = x_data.GetSqlString(3).Value;
>
> x_resultado.vence = x_data.GetSqlDateTime(4).Value;
>
> x_resultado.estado = x_data.GetSqlString(5).Value;
>
> x_resultado.nc = x_nc.Nc(x_data.GetSqlString(6).Value);
>
> }
>
>
>
> Bye
>
> BG
>
>


Respuesta Responder a este mensaje
#3 Antonio Andrés Avila Moreno
27/08/2004 - 23:28 | Informe spam
Barbara,
En realidad lo que las personas te estan diciendo sobre el rendimiento en
SQL y sobre cual usar o no, es en SQL Server, no es de .NET, los cursores se
manejan en SQL server como alternativa cuando por medio de una query
(conjunto de datos), no se puede procesar la informacion. Es mucho mejor
utilizar un query que obtenga dicha informacion y si no se puede entonces lo
haces a traves de cursores. En cuanto a .NET el SqlDataReader es un elemento
que obtiene informacion de un query o un cursor y que solo puede ser leido
una unica vez, mientras que si utilizas una estructura dataset generalmente
obtenida mediante un SqlDataAdapter puede hacer modificaciones y es
mayormente preferido para sistemas escalables y distribuidos, ya que este
esta desconectado y el SqlDataReader tiene que estar conectado, osea debe de
mantener la conexion a la base de datos mientra es usado.

En resumen, si puedes obtener la informacion de la base de datos a traves de
un query es mucho mejor que un cursor. Un cursor lo tienes que manejar
dentro de un store procedure y un query no necesariamente, pero es mejor
tenerlo en un store procedure para mejorar el rendimiento de procesamiento.

El codigo que tu tienes es un query ("conjunto de datos") que es procesado
para una arquitectura conectada y de solo lectura.


Saludos ...

Antonio Andrés Avila Moreno
Microsoft Certified Profesional
Mexico

P.D. Un cursor es en realidad un subconjunto de datos

DECLARE CursorEmployee CURSOR FOR
SELECT LastName, FirstName, Title, Title Courtesy
FROM Employee
WHERE BirthDate < DateAdd(y, -18, GetDate())

"Bárbara González" escribió en el mensaje
news:%
Genial. Gracias.

Bye
BG

"Vyacheslav Popov" escribió en el mensaje
news:u2f%
> Hola Bárbara
>
> Sin duda alguna estas usando cursor, SqlDataReader, ya es


unidireccional.
> El conjunto de datos es DataSet.
> Saludos
>
> "Bárbara González" escribió en el mensaje
> news:eFS$
> > Saludos al grupo
> >
> > Estoy aprendiendo y a la vez desarrollando una aplicacion en C# con
> > SQLSERVER pero he tenido problemas de rendimiento y el mayor numero de
> > consejos que recibo es el de no usar CURSORES y en vez de ellos use
> CONJUNTO
> > DE DATOS, bueno el caso es que no se que es cada cosa, asi que publico
una
> > seccion de mi codigo a ver que estoy usando o un cursor o un conjunto


de
> > datos.
> >
> > GRacias
> >
> > System.Data.SqlClient.SqlConnection x_coneccion = new
> > System.Data.SqlClient.SqlConnection(coneccion);
> >
> > System.Data.SqlClient.SqlCommand x_comando = new
> > System.Data.SqlClient.SqlCommand(
> >
> > "SELECT * FROM _usuarios " +
> >
> > "WHERE (nick = @Nick) AND (clave = @Clave)",x_coneccion);
> >
> > x_comando.Parameters.Add("@Nick" , SqlDbType.VarChar,20).Value = nick;
> >
> > x_comando.Parameters.Add("@Clave", SqlDbType.VarChar,20).Value clave;
> >
> > x_coneccion.Open();
> >
> > System.Data.SqlClient.SqlDataReader x_data x_comando.ExecuteReader();
> >
> > if (x_data.Read())
> >
> > {
> >
> > x_resultado.id = x_data.GetSqlInt32(0).Value;
> >
> > x_resultado.nombre = x_data.GetSqlString(1).Value;
> >
> > x_resultado.nick = x_data.GetSqlString(2).Value;
> >
> > x_resultado.clave = x_data.GetSqlString(3).Value;
> >
> > x_resultado.vence = x_data.GetSqlDateTime(4).Value;
> >
> > x_resultado.estado = x_data.GetSqlString(5).Value;
> >
> > x_resultado.nc = x_nc.Nc(x_data.GetSqlString(6).Value);
> >
> > }
> >
> >
> >
> > Bye
> >
> > BG
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Bárbara González
27/08/2004 - 23:51 | Informe spam
Antonio
Recomiendas altamente cambiarlo por un DATASET para leer, aunque la verdad
solo estoy leyendo un registro con ese código.

Gracias por tu hermosa explicación


"Antonio Andrés Avila Moreno" escribió en el mensaje
news:%
Barbara,
En realidad lo que las personas te estan diciendo sobre el rendimiento en
SQL y sobre cual usar o no, es en SQL Server, no es de .NET, los cursores


se
manejan en SQL server como alternativa cuando por medio de una query
(conjunto de datos), no se puede procesar la informacion. Es mucho mejor
utilizar un query que obtenga dicha informacion y si no se puede entonces


lo
haces a traves de cursores. En cuanto a .NET el SqlDataReader es un


elemento
que obtiene informacion de un query o un cursor y que solo puede ser leido
una unica vez, mientras que si utilizas una estructura dataset


generalmente
obtenida mediante un SqlDataAdapter puede hacer modificaciones y es
mayormente preferido para sistemas escalables y distribuidos, ya que este
esta desconectado y el SqlDataReader tiene que estar conectado, osea debe


de
mantener la conexion a la base de datos mientra es usado.

En resumen, si puedes obtener la informacion de la base de datos a traves


de
un query es mucho mejor que un cursor. Un cursor lo tienes que manejar
dentro de un store procedure y un query no necesariamente, pero es mejor
tenerlo en un store procedure para mejorar el rendimiento de


procesamiento.

El codigo que tu tienes es un query ("conjunto de datos") que es procesado
para una arquitectura conectada y de solo lectura.


Saludos ...

Antonio Andrés Avila Moreno
Microsoft Certified Profesional
Mexico

P.D. Un cursor es en realidad un subconjunto de datos

DECLARE CursorEmployee CURSOR FOR
SELECT LastName, FirstName, Title, Title Courtesy
FROM Employee
WHERE BirthDate < DateAdd(y, -18, GetDate())

"Bárbara González" escribió en el mensaje
news:%
> Genial. Gracias.
>
> Bye
> BG
>
> "Vyacheslav Popov" escribió en el mensaje
> news:u2f%
> > Hola Bárbara
> >
> > Sin duda alguna estas usando cursor, SqlDataReader, ya es
unidireccional.
> > El conjunto de datos es DataSet.
> > Saludos
> >
> > "Bárbara González" escribió en el mensaje
> > news:eFS$
> > > Saludos al grupo
> > >
> > > Estoy aprendiendo y a la vez desarrollando una aplicacion en C# con
> > > SQLSERVER pero he tenido problemas de rendimiento y el mayor numero


de
> > > consejos que recibo es el de no usar CURSORES y en vez de ellos use
> > CONJUNTO
> > > DE DATOS, bueno el caso es que no se que es cada cosa, asi que


publico
> una
> > > seccion de mi codigo a ver que estoy usando o un cursor o un


conjunto
de
> > > datos.
> > >
> > > GRacias
> > >
> > > System.Data.SqlClient.SqlConnection x_coneccion = new
> > > System.Data.SqlClient.SqlConnection(coneccion);
> > >
> > > System.Data.SqlClient.SqlCommand x_comando = new
> > > System.Data.SqlClient.SqlCommand(
> > >
> > > "SELECT * FROM _usuarios " +
> > >
> > > "WHERE (nick = @Nick) AND (clave = @Clave)",x_coneccion);
> > >
> > > x_comando.Parameters.Add("@Nick" , SqlDbType.VarChar,20).Value nick;
> > >
> > > x_comando.Parameters.Add("@Clave", SqlDbType.VarChar,20).Value > clave;
> > >
> > > x_coneccion.Open();
> > >
> > > System.Data.SqlClient.SqlDataReader x_data > x_comando.ExecuteReader();
> > >
> > > if (x_data.Read())
> > >
> > > {
> > >
> > > x_resultado.id = x_data.GetSqlInt32(0).Value;
> > >
> > > x_resultado.nombre = x_data.GetSqlString(1).Value;
> > >
> > > x_resultado.nick = x_data.GetSqlString(2).Value;
> > >
> > > x_resultado.clave = x_data.GetSqlString(3).Value;
> > >
> > > x_resultado.vence = x_data.GetSqlDateTime(4).Value;
> > >
> > > x_resultado.estado = x_data.GetSqlString(5).Value;
> > >
> > > x_resultado.nc = x_nc.Nc(x_data.GetSqlString(6).Value);
> > >
> > > }
> > >
> > >
> > >
> > > Bye
> > >
> > > BG
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Antonio Andrés Avila Moreno
28/08/2004 - 01:33 | Informe spam
Barbara,
Te recomiendo que lo hagas si tu aplicacion crees que vaya a tender a
distribuirse, si no dejalo asi. Si tu aplicacion no se a distribuir y
precisas mayor rapidez hazlo con el SqlDataReader, ocupa menos memoria.

Lo que necesitas es hacer mas rapido el procesamiento de lado de la base de
datos para obtener la informacion que requieres.


Saludos ...

Antonio Andrés Avila Moreno
Mexico
"Bárbara González" escribió en el mensaje
news:%23y3%236$
Antonio
Recomiendas altamente cambiarlo por un DATASET para leer, aunque la verdad
solo estoy leyendo un registro con ese código.

Gracias por tu hermosa explicación


"Antonio Andrés Avila Moreno" escribió en el


mensaje
news:%
> Barbara,
> En realidad lo que las personas te estan diciendo sobre el rendimiento


en
> SQL y sobre cual usar o no, es en SQL Server, no es de .NET, los


cursores
se
> manejan en SQL server como alternativa cuando por medio de una query
> (conjunto de datos), no se puede procesar la informacion. Es mucho mejor
> utilizar un query que obtenga dicha informacion y si no se puede


entonces
lo
> haces a traves de cursores. En cuanto a .NET el SqlDataReader es un
elemento
> que obtiene informacion de un query o un cursor y que solo puede ser


leido
> una unica vez, mientras que si utilizas una estructura dataset
generalmente
> obtenida mediante un SqlDataAdapter puede hacer modificaciones y es
> mayormente preferido para sistemas escalables y distribuidos, ya que


este
> esta desconectado y el SqlDataReader tiene que estar conectado, osea


debe
de
> mantener la conexion a la base de datos mientra es usado.
>
> En resumen, si puedes obtener la informacion de la base de datos a


traves
de
> un query es mucho mejor que un cursor. Un cursor lo tienes que manejar
> dentro de un store procedure y un query no necesariamente, pero es mejor
> tenerlo en un store procedure para mejorar el rendimiento de
procesamiento.
>
> El codigo que tu tienes es un query ("conjunto de datos") que es


procesado
> para una arquitectura conectada y de solo lectura.
>
>
> Saludos ...
>
> Antonio Andrés Avila Moreno
> Microsoft Certified Profesional
> Mexico
>
> P.D. Un cursor es en realidad un subconjunto de datos
>
> DECLARE CursorEmployee CURSOR FOR
> SELECT LastName, FirstName, Title, Title Courtesy
> FROM Employee
> WHERE BirthDate < DateAdd(y, -18, GetDate())
>
> "Bárbara González" escribió en el mensaje
> news:%
> > Genial. Gracias.
> >
> > Bye
> > BG
> >
> > "Vyacheslav Popov" escribió en el mensaje
> > news:u2f%
> > > Hola Bárbara
> > >
> > > Sin duda alguna estas usando cursor, SqlDataReader, ya es
> unidireccional.
> > > El conjunto de datos es DataSet.
> > > Saludos
> > >
> > > "Bárbara González" escribió en el mensaje
> > > news:eFS$
> > > > Saludos al grupo
> > > >
> > > > Estoy aprendiendo y a la vez desarrollando una aplicacion en C#


con
> > > > SQLSERVER pero he tenido problemas de rendimiento y el mayor


numero
de
> > > > consejos que recibo es el de no usar CURSORES y en vez de ellos


use
> > > CONJUNTO
> > > > DE DATOS, bueno el caso es que no se que es cada cosa, asi que
publico
> > una
> > > > seccion de mi codigo a ver que estoy usando o un cursor o un
conjunto
> de
> > > > datos.
> > > >
> > > > GRacias
> > > >
> > > > System.Data.SqlClient.SqlConnection x_coneccion = new
> > > > System.Data.SqlClient.SqlConnection(coneccion);
> > > >
> > > > System.Data.SqlClient.SqlCommand x_comando = new
> > > > System.Data.SqlClient.SqlCommand(
> > > >
> > > > "SELECT * FROM _usuarios " +
> > > >
> > > > "WHERE (nick = @Nick) AND (clave = @Clave)",x_coneccion);
> > > >
> > > > x_comando.Parameters.Add("@Nick" , SqlDbType.VarChar,20).Value > nick;
> > > >
> > > > x_comando.Parameters.Add("@Clave", SqlDbType.VarChar,20).Value > > clave;
> > > >
> > > > x_coneccion.Open();
> > > >
> > > > System.Data.SqlClient.SqlDataReader x_data > > x_comando.ExecuteReader();
> > > >
> > > > if (x_data.Read())
> > > >
> > > > {
> > > >
> > > > x_resultado.id = x_data.GetSqlInt32(0).Value;
> > > >
> > > > x_resultado.nombre = x_data.GetSqlString(1).Value;
> > > >
> > > > x_resultado.nick = x_data.GetSqlString(2).Value;
> > > >
> > > > x_resultado.clave = x_data.GetSqlString(3).Value;
> > > >
> > > > x_resultado.vence = x_data.GetSqlDateTime(4).Value;
> > > >
> > > > x_resultado.estado = x_data.GetSqlString(5).Value;
> > > >
> > > > x_resultado.nc = x_nc.Nc(x_data.GetSqlString(6).Value);
> > > >
> > > > }
> > > >
> > > >
> > > >
> > > > Bye
> > > >
> > > > BG
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida