当返回的数据集由一个空行组成时,Rows.Count = 1

问题描述:

由于没有满足我查询的所有条件的记录,所以我的查询不返回任何内容,而是一个空行。然而,Rows.Count是1,而不是0。这里是我的查询:当返回的数据集由一个空行组成时,Rows.Count = 1

SELECT LicenseID 
FROM LICENSES 
WHERE LicenseType = @LicenseType 
    AND DriverID = @DriverID 
    AND CarID IN(
     SELECT CarID 
     FROM CARS 
     WHERE CarSerial = @CarSerial 
      AND DriverID = @DriverID 
    ) AND LicenseID IS NOT NULL 
    AND ((StartDate <= CONVERT(DATETIME, @EndDate)) 
    AND (EndDate >= CONVERT(DATETIME, @StartDate))) 

这里是我的C#的if语句的条件,由于某种原因一直是真正由于行数,即使没有记录会议标准:

if (ds != null && ds.Tables[0].Rows.Count > 0) 

使用的数据库是SQL Server。这在以前似乎在Oracle下正常工作。

+0

空行仍然是一行。在sql中尝试一些isnull? – Trey

+0

如果没有满足查询条件的记录,那么您的查询将返回***零行,而不是空行。所以,显然,你做错了什么。 –

+1

如果你得到1行返回,你能看到什么值?也许这将有助于排查问题。基本上,当这行代码正在执行时,它有一行数据,所以找出它是什么。 – Jason

为了避免出错:

if (ds.Tables.Count > 0) 
{ 
     if (ds.Tables[0].Rows.Count > 0) 
     { 
     //Then Return a value here or Get the date 
       foreach (DataRow dr in ds.Tables[0].Rows) 
       { 
        String getFirstRow = dr[0].ToString(); 
        //And so on........ 
       } 
     } 
     else 
     { 
      //Return value if no rows found. 
     } 
} 

什么我需要添加只是为了 “LicenseID <>'” 额外的检查。 “LicenseID不是NULL”是不够的,因为有记录会议所有条件但具有LicenseID =“”。我相信这并不是Oracle数据库的问题,但在切换到SQL Server之后却成了问题。感谢您的所有意见和建议。