У меня есть веб-сайт ASP.NET 2.0, который подключается к базе данных SQL. Я обновил SQL-сервер с 2000 до 2008, и с тех пор одна страница отказывается работать.
Я решил, что проблема в том, что вызов SqlDataReader.HasRows возвращает false, даже если набор данных не пустой, а удаление проверки позволяет циклу через reader.Read () получить доступ к ожидаемым данным.
_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())
{...
Кто-нибудь знает, что происходит? На других страницах есть похожие блоки кода, где HasRows возвращает правильное значение.
РЕДАКТИРОВАТЬ - просто чтобы уточнить, хранимая процедура возвращает результаты, которые я подтвердил, потому что цикл проходит нормально, если я уберу проверку HasRows. Изменение только имени сервера SQL в строке подключения к идентичной базе данных, работающей на SQL 2000, устраняет проблему. Я проверил, что NOCOUNT выключен, так что еще может заставить HasRows возвращать false, если это не так ??
EDIT2 - вот 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
Большое спасибо заранее.