我有一個連接到SQL數據庫的ASP.NET 2.0網站。我已經將SQL服務器從2000年升級到2008年,從那時起,一個頁面拒絕工作。自SQL 2008升級以來,SqlDataReader.HasRows返回false
我已經解決了這個問題,即使數據集不是空的,對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,看看幕後發生了什麼。可能是遷移問題。事件探查器會向您顯示發送的查詢,以便您可以測試它們以確保它們正常工作。 – Will 2008-10-13 12:26:48
在這個存儲過程中是否有打印語句? (猜測) – shahkalpesh 2008-10-13 14:56:36
nope,它只是一個簡單的選擇與一個聯接 – ballpointpe0n 2008-10-13 15:02:20