ASP.NET - problemas con rescate de datos

 
Vista:

problemas con rescate de datos

Publicado por arcenett (45 intervenciones) el 05/02/2008 17:14:26
hola foreros , TENGO EL SIGUIENTE PROBLEMA....

TENGO UN STORE PROCEDURE QUE ME DA LA CANTIDAD DE FILAS AFECTADAS, OSEA PARA EXPLICARME MEJOR.

ESTOY HACIENDO UNA CONSULTA QUE ME ARROJA X FILAS CON DISTINTOS RESULTADOS , LA CONSULTA PREGUNTA POR CIERTOS CAMPOS LOS CUALES AGRUPA POR SEDE Y CONCEPTO Y DE RESULTADO POR EJEMPLO UNA ME DA 15 FILAS PERO SI LE PONGO UN COUNT ENTRE MEDIO DE LA CONSULTA ME CUENTA TODOS LOS CAMPOS KE NO ESTAN AGRUPADOS POR ESO HICE UNA CONSULTA QUE ME DE LAS FILAS AFECTADAS CON EL @@ROWCOUNT, ESTA ES MI CONSULTA SQL:

SELECT distinct (@@rowcount)as contador1 from GCFAC
WHERE YEAR (GCFACFECEM)=2007 AND MONTH (GCFACFECEM)=11 AND (GCFACINDNU)='N' AND MBDOCCOD<>'NCRE'
and GCFACCVE = 'AE' or GCFACCVE = 'AP' or GCFACCVE = 'SA' or GCFACCVE like '%U%'
GROUP BY GCFACSEDE,GCFACCVE

CUANDO LA EJECUTO EN EL ANALIZADOR DE CONSULTAS TODO VA BIEN , EL PROBLEMA SURGE CUANDO QUIERO RESCATAR ESE VALOR (CONTADOR1)EN ASP.NET, ESTE ES EL ERROR QU ME DA:

Detalles de la excepción: System.IndexOutOfRangeException: contador1

Error de código fuente:

Línea 126:
Línea 127:
Línea 128: Response.Write("<tr><td>" + (String)resultado2["contador1"].ToString() + "</td></tr>");
Línea 129:
Línea 130:

Archivo de origen: c:InetpubwwwrootGallyasInforme_De_VentasResultado.aspx.cs Línea: 128

Seguimiento de la pila:

[IndexOutOfRangeException: contador1]
System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +95
System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +170
System.Data.SqlClient.SqlDataReader.get_Item(String name) +35
Informe_De_Ventas_Resultado.Page_Load(Object sender, EventArgs e) in c:InetpubwwwrootGallyasInforme_De_VentasResultado.aspx.cs:128
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +31
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +68
System.Web.UI.Control.OnLoad(EventArgs e) +88
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3036

YO RESCATO LA INFO DE ESTA FORMA YA QUE EL PROCEDIMIENTO CORRE UNA SERIE DE CONSULTAS:

cnn2.Open();
SqlParameter[] param = new SqlParameter[2];
param[0] = new SqlParameter("@mes", SqlDbType.Int);
param[0].Value = mes.ToString();

param[1] = new SqlParameter("@ano", SqlDbType.Int);
param[1].Value = ano.ToString();

comando2.CommandTimeout = 5000;
comando2.CommandType = CommandType.StoredProcedure;
comando2.CommandText = "PruebaInformeVta";
comando2.Connection = cnn2;
comando2.Parameters.AddRange(param);


//cnn2.Open();
//comando2.Connection = cnn2;
resultado2 = comando2.ExecuteReader();

while (resultado2.Read())
{
Response.Write((String)resultado2["contador1"].ToString() );
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:problemas con rescate de datos

Publicado por @vm (196 intervenciones) el 06/02/2008 00:19:31
Mejor intentar usar un valor RETURN o un parametro de salida en el STORE PROCEDURE, y ya asegura la devolución del valor q te intersa. Puede ser q la consulta no se cumple y no devuelve nada y pues no hay campo q consultar o no se, jejee!!! a mi se me ocurre q hagas lo q te sugiero, saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas con rescate de datos

Publicado por arcenett (45 intervenciones) el 06/02/2008 17:46:19
hola, gracias por la respuesta ya pude resolver mi problema, a continuación dejo el código de como lo hice... xD jejej :

el store :

@contador1 int output
.
.
set @contador1 = @@rowcount

return @contador1

en mi webform:

comando2.CommandTimeout = 5000;
comando2.CommandType = CommandType.StoredProcedure;
comando2.CommandText = "PruebaInformeVta";
comando2.Connection = cnn2;
comando2.Parameters.AddRange(param);

SqlParameter paramSalida1 = new SqlParameter();
paramSalida1.ParameterName = "@contador1";
paramSalida1.SqlDbType = SqlDbType.Int;
paramSalida1.Direction = ParameterDirection.Output;
comando2.Parameters.Add(paramSalida1);

comando2.ExecuteNonQuery();
contador1 = Int32.Parse(comando2.Parameters["@contador1"].Value.ToString());

cnn2.Close();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar