我有一个连接到 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())
{...
Run Code Online (Sandbox Code Playgroud)
有人知道发生了什么吗?在 HasRows 返回正确值的其他页面上也有类似的代码块。
编辑 - 只是为了澄清,存储过程确实返回我已经确认的结果,因为如果我删除 HasRows 检查,循环运行良好。只需将连接字符串中 SQL 服务器的名称更改为在 SQL 2000 上运行的相同数据库,问题就会消失。我已经检查过 NOCOUNT 已关闭,那么如果情况并非如此,还有什么可以使 HasRows …