我有一个连接到SQL数据库的ASP.NET 2.0网站。我已将SQL Server从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 Server名称更改为在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

提前谢谢了。

最佳答案

如果直接在SSMS中调用存储过程,存储过程是否起作用?首先,请确保它确实如此。

09-10 02:12
查看更多