select contra sqlServer

17/12/2007 - 14:46 por Alex López | Informe spam
Hola.
Tengo que realizar una consulta contra una tabla SQL server 2005.
Si ejecuto la consulta directamente en el SQLServer Management Studio
obtengo el resultado esperado: 10.
En cambio cuando la ejecuto en mi codigo ASP solo obtengo el 1.
Estoy acostumbrado a trabajar con Oracle y no se como obtener el resultado
correctamente.
El código que ejecuto es el siguiente:

string connectionString = "Initial Catalog=Proyecto_MSCRM; Data
Source=SERVER; Trusted_Connection=yes;";

SqlConnection con = new SqlConnection(connectionString);

con.Open();

SqlCommand cmd = new SqlCommand();


//BUSCAMOS EL CODIGO MAYOR DE CLIENTE FINAL EXISTENTE EN CMR

//AL RESULTADO OBTENIDO LE SUMAMOS UNO PARA QUE QUE SEA EL QUE SE ASIGNA AL
SIGUIENTE CLIENTE FINAL

string queryCodMax = @"SELECT max(sic)

FROM LeadBase

WHERE (len(sic)) IN (SELECT
max(len(sic))


FROM LeadBase)";


SqlDataAdapter codMax = new SqlDataAdapter(queryCodMax, con);

DataTable tablaCodMax = new DataTable();

while (codMax.has)

Response.Write("<datos>" + codMax.Fill(tablaCodMax) + "</datos>");

con.Close();







codMax.Fill(tablaCodMax) me duvuelve 1 cuando el resultado es 10.

Gracias a todos por vuestra ayuda.
 

Leer las respuestas

#1 Pedro Luna Montalvo
17/12/2007 - 15:08 | Informe spam
Saludos Alex,

Me puedes confirmar si el codigo que indicas es el correcto y te ha
compilado??
Te hago esta pregunta por estas líneas:

SqlDataAdapter codMax = new SqlDataAdapter(queryCodMax, con);
DataTable tablaCodMax = new DataTable();
while (codMax.has)
Response.Write("<datos>" + codMax.Fill(tablaCodMax) + "</datos>");



Según veo, codMax es del tipo SqlDataAdapter, y este tipo no tiene miembros
que se llamen "has", como usas en el WHILE.

Por otro lado, el método Fill() te retorna el número de filas agregadas por
este método, y no los valores agregados en sí. es por esto que el valor que
observas es UNO (una fila afectada). Esa fila contiene el valor que tu
esperas que es el 11.


En lugar de esto, puedes obtener el valor del DataTable y mostrarlo en su
lugar, así:

codMax.Fill(tablaCodMax);
if (tablaCodMax.Rows.Count = 0) {
Response.Write("<datos>sin datos</datos>");
}
else {
Response.Write("<datos>" + tablaCodMax.Rows[0][0].ToString() +
"</datos>");
}


Saludos,
Pedro Luna



"Alex López" escribió en el mensaje de
noticias:
Hola.
Tengo que realizar una consulta contra una tabla SQL server 2005.
Si ejecuto la consulta directamente en el SQLServer Management Studio
obtengo el resultado esperado: 10.
En cambio cuando la ejecuto en mi codigo ASP solo obtengo el 1.
Estoy acostumbrado a trabajar con Oracle y no se como obtener el resultado
correctamente.
El código que ejecuto es el siguiente:

string connectionString = "Initial Catalog=Proyecto_MSCRM; Data
Source=SERVER; Trusted_Connection=yes;";

SqlConnection con = new SqlConnection(connectionString);

con.Open();

SqlCommand cmd = new SqlCommand();


//BUSCAMOS EL CODIGO MAYOR DE CLIENTE FINAL EXISTENTE EN CMR

//AL RESULTADO OBTENIDO LE SUMAMOS UNO PARA QUE QUE SEA EL QUE SE ASIGNA
AL SIGUIENTE CLIENTE FINAL

string queryCodMax = @"SELECT max(sic)

FROM LeadBase

WHERE (len(sic)) IN (SELECT
max(len(sic))


FROM LeadBase)";


SqlDataAdapter codMax = new SqlDataAdapter(queryCodMax, con);

DataTable tablaCodMax = new DataTable();

while (codMax.has)

Response.Write("<datos>" + codMax.Fill(tablaCodMax) + "</datos>");

con.Close();







codMax.Fill(tablaCodMax) me duvuelve 1 cuando el resultado es 10.

Gracias a todos por vuestra ayuda.


Preguntas similares