net mvc guardar graficos fecha desde chart asp c# asp.net sql sql-server-2008

mvc - gridview asp net c# sql server



SqlDataReader.HasRows devuelve falso desde la actualizaciĆ³n de SQL 2008 (7)

Tengo un sitio web ASP.NET 2.0 que se conecta a una base de datos SQL. Actualicé el servidor SQL de 2000 a 2008 y, desde entonces, una página se niega a funcionar.

He resuelto que el problema es que la llamada a SqlDataReader.HasRows devuelve falso aunque el conjunto de datos no está vacío y la eliminación de la comprobación permite que el lector pase por el lector.Leer () para acceder a los datos esperados.

_connectionString = WebConfigurationManager.ConnectionStrings["SQLServer"].ConnectionString; SqlConnection connection = new SqlConnection(_connectionString); SqlCommand command = new SqlCommand(searchtype, connection); SqlParameter _parSeachTerm = new SqlParameter("@searchterm", SqlDbType.VarChar, 255); _parSeachTerm.Value = searchterm; command.Parameters.Add(_parSeachTerm); command.CommandType = CommandType.StoredProcedure; try { connection.Open(); SqlDataReader reader = command.ExecuteReader(); if (reader.HasRows) //this always returns false!? { while (reader.Read()) {...

¿Alguien tiene alguna idea de lo que está pasando? Hay bloques de código similares en otras páginas donde HasRows devuelve el valor correcto.

EDITAR- Solo para aclarar, el procedimiento almacenado SÍ devuelve resultados que he confirmado porque el ciclo funciona bien si elimino la verificación HasRows. Cambiar el nombre del servidor SQL en la cadena de conexión a una base de datos idéntica que se ejecuta en SQL 2000 hace que el problema desaparezca. He comprobado que NOCOUNT está desactivado, ¿qué otra cosa podría hacer que HasRows devuelva falso cuando ese no es el caso?

EDIT2- Aquí está el SP

CREATE PROCEDURE StaffEnquirySurnameSearch @searchterm varchar(255) AS SELECT AD.Name, AD.Company, AD.telephoneNumber, AD.manager, CVS.Position, CVS.CompanyArea, CVS.Location, CVS.Title, AD.guid AS guid, AD.firstname, AD.surname FROM ADCVS AD LEFT OUTER JOIN CVS ON AD.Guid=CVS.Guid WHERE AD.SurName LIKE @searchterm ORDER BY AD.Surname, AD.Firstname GO

Muchas gracias de antemano.


Estoy especulando de nuevo.
¿Tiene múltiples lectores de datos abiertos por casualidad?

Agregar MARS_Connection = yes; O MultipleActiveResultSets = verdadero para la cadena de conexión, si eso ayuda.
Además, su uso de conexión y lector de datos no es una forma recomendada de hacer las cosas

una forma más simple de escribirlo podría ser

using (connection cnn = new Connection(...) { using (SqlDataReader rdr = .... { //some code which deals with datareader } }

Esto cerrará la conexión y el lector de datos una vez que se complete la operación.


¿Funciona el procedimiento almacenado si lo invocas directamente, digamos en SSMS? Comenzaría asegurándome de que así sea.


¿No estás usando RAISEERROR por casualidad? Encontramos algunos problemas usando el mismo patrón que el anterior (compruebe HasRows, luego reader.Read ()) y descubrí que si RAISEERROR se usó con un cierto código de error (por encima de 16, creo) entonces el HasRows devolvería falso y tendríamos problemas para atrapar una excepción


Creo que tienes NOCOUNT al revés. Creo que NOCOUNT debe estar encendido para que esto funcione.

En su procedimiento almacenado, agregue SET NOCOUNT ON después del AS y antes de cualquier código. De lo contrario, devuelve dos conjuntos de resultados. Uno con el recuento y otro con los datos reales. Solo quiere el resultado establecido con los datos reales.


Es su cadena de conexión, el procedimiento almacenado o un error en el controlador sql. La mayoría de las personas está adivinando el procedimiento almacenado. Entonces muéstranos el código. Mientras lo hace, muéstrenos la cadena de conexión y los contenidos de las variables de tipo de búsqueda.


Primero, verifique el procedimiento como dice @tvanfosson. En segundo lugar, la comprobación de HasRows () es realmente innecesaria en el fragmento de código.


HasRows requiere un cursor desplazable.

¿Las filas que está trayendo contienen datos de image/BLOB gran tamaño?

Como sugirió otra persona, creo que publicar el Stored Procedure podría arrojar algo de luz sobre el asunto ...