【发布时间】:2010-09-16 20:50:30
【问题描述】:
我有一个连接到 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
非常感谢。
【问题讨论】:
-
退出 Profiler,看看幕后发生了什么。可能是迁移的问题。 Profiler 会在发送查询时向您显示查询,以便您对其进行测试以确保它们正常工作。
-
这个存储过程里面有打印语句吗? (猜测)
-
不,这只是一个简单的选择与一个连接
标签: c# asp.net sql sql-server-2008