微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 自SQL 2008升级以来,SqlDataReader.HasRows返回false

我有一个连接到sql数据库的ASP.NET 2.0网站.我已经将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

提前谢谢了.

解决方法

如果直接调用存储过程,SSMS中是否有效?我首先要确保它确实如此.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐