Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自SQL 2008升级后,SqlDataReader.HasRows返回false_C#_Asp.net_Sql_Sql Server 2008 - Fatal编程技术网

C# 自SQL 2008升级后,SqlDataReader.HasRows返回false

C# 自SQL 2008升级后,SqlDataReader.HasRows返回false,c#,asp.net,sql,sql-server-2008,C#,Asp.net,Sql,Sql Server 2008,我有一个连接到SQL数据库的ASP.NET2.0网站。我将SQL server从2000年升级到2008年,从那以后,有一个页面无法工作 我发现问题在于,即使数据集不是空的,对SqlDataReader.HasRows的调用仍返回false,删除该检查将允许通过reader.Read()循环访问预期的数据 _connectionString = WebConfigurationManager.ConnectionStrings["SQLServer"].ConnectionString;

我有一个连接到SQL数据库的ASP.NET2.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呢

编辑2-这是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中调用它,存储过程是否工作?首先,我要确保它是正确的。

首先,按照@tvanfosson所说的检查程序。
其次,在代码段中实际上不需要检查HasRows()

你不是偶然使用RAISEERROR的吗?我们发现使用与上面相同的模式时出现了一些问题(检查HasRows,然后是reader.Read()),并发现如果RAISEERROR与某个错误代码一起使用(我相信是16以上),那么HasRows将返回false,并且我们将无法捕获异常。

这可能是您的连接字符串,即存储过程,或者sql驱动程序中的错误。 大多数人都在猜测存储过程。 让我们看看代码。
操作时,向我们显示连接字符串和searchtype变量内容。

HasRows
需要一个可滚动的光标

您要返回的行是否包含任何大的
图像/BLOB
数据


正如其他人所建议的,我认为发布
存储过程可能会对这件事有所帮助。

我又在猜测。
您是否碰巧打开了多个数据读取器

添加MARS_连接=是;或MultipleActiveResultSets=连接字符串的true(如果有帮助)。
此外,您不建议使用connection&datareader进行操作

一种更简单的编写方法是


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

操作完成后,此操作将关闭连接和数据读取器。

我认为您没有倒数。 我相信这一切都不需要计算

在存储过程中添加 不计较 在AS之后和任何代码之前。 否则,它将返回两个结果集。 一个是计数,一个是实际数据。
您只需要具有实际数据的结果集。

拿出Profiler,看看幕后发生了什么。这可能是迁移的一个问题。探查器将在发送查询时向您显示查询,以便您可以测试它们以确保它们正常工作。此存储过程中是否有打印语句?(猜测)不,这只是一个简单的选择,只有一个连接。谢谢,添加MARS会提供系统。ArgumentException:关键字不受支持:“MARS\u connection”。清理资源是在最后一个区块完成的。我认为你是对的。如果海报将NOCOUNT信息放在问题中而不是评论中,会很有帮助。。。