SQLデータベースに接続するASP.NET2.0Webサイトがあります。SQL Serverを2000から2008にアップグレードしましたが、それ以降、1ページが機能しなくなりました。
私は問題を解決しました。データセットが空でなくても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を返す原因は他にありますか?
編集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
よろしくお願いします。