Esta página esta en desarrollo, Sean bienvenidos.

 Asp.net C# y SQL Server.

Tiempo de espera ‘Parameters.Add’ vs ‘Parameters.AddWithValue’.

 

Caso típico, les solicitan una aplicación ya sea WEB o en FORMA.

Como todos buenos desarrolladores, terminamos y entregamos.

Como siempre, en ambiente de desarrollo – Todo paz y felicidad – y en productivo – Sin comentarios -.

De repente notamos que las consultas se están tardando demasiado y tal es el punto que genera

un tiempo de espera.

 

¿Qué hacer ante esa situación?

Aumentamos el tiempo de espera.

consultaGenericaCommand.CommandTimeout = 1200;

Esto nos beneficia, porque resolvemos el problema.

Pero la realidad es que no nos soluciona nada.

 

Llegando a un análisis más profundo, nos percatamos que, si ejecutamos la misma consulta en el  gestor de base de datos, se ejecuta de una forma más rápida y eficiente

comparado  con el que tarda el aplicativo.

 

Y la pregunta es ¿por qué?

Observamos y en este ejemplo ya usamos los ‘Parameters‘ y todo hasta aquí va bien.

consultaGenericaCommand.Parameters.AddWithValue(“@MacAddres”, MacAddresEntrada);

consultaGenericaCommand.Parameters.AddWithValue(“@Codigo”, CodigoEntrada);

No percatamos que, en esta ejecución de la consulta, no trae resultados.

Mas sin embargo copiamos la consulta y la ejecutamos en el gestor de base de datos y nos regresa resultados.

 

¿Qué pasa?

Seguimos revisando, revisamos cadenas de conexión y todo bien.

Entonces realizamos lo desesperado, quitamos los ‘Parameters‘ y ejecutamos el aplicativo.

y si nos regresa resultados.

 

Ahora bien, hay algo interesante en este embrollo, cuando es una base de datos pequeña o la

consulta se hace en una tabla con menos de 100000 registros no afecta en nada.

 

Pero cuando se realiza en una tabla con más de 1 millón de registros,

esto nos afecta, no por que estemos haciendo mal las cosas.

Si no porque, estamos usando variables ‘@MacAddres‘, pero no las estamos declarando.

 

Recordemos que SQL usaríamos algo así:

DECLARE @MacAddres varchar(30);  

 

Pero al no estarlas declarando SQL las crea e intenta asignarle alguna longitud y tipo de dato.

Que por razones obvias no conoce.

 

Entonces para evitar todo este embrollo hacemos lo siguiente.

consultaGenericaCommand.Parameters.Add(“@MacAddres”, SqlDbType.VarChar, 70).Value = MacAddresEntrada;

consultaGenericaCommand.Parameters.Add(“@Codigo”, SqlDbType.Char, 35).Value = CodigoEntrada;

 

 

Es la misma declaración que antes, pero ahora con tipo de dato y longitud.

Oye, pero lo estoy ejecutando desde Visual Estudio, y solo declaramos los ‘Parameters.AddWithValue

Es verdad, pero como lo mencione antes, este tipo de situaciones se van a presentar cuando consultas bases de datos grandes, no pequeñas.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Nube de etiquetas

A %d blogueros les gusta esto: