【问题标题】:Rows.Count = 1 when returned dataset consists of an empty row当返回的数据集包含空行时,Rows.Count = 1
【发布时间】:2017-09-06 01:42:27
【问题描述】:

我的查询只返回一个空行,因为没有符合我查询的所有条件的记录。但是,Rows.Count 是 1 而不是 0。这是我的查询:

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 下可以正常工作。

【问题讨论】:

  • 空行仍然是一行。在 sql 中尝试一些 isnull ?
  • 如果没有符合查询所有条件的记录,那么您的查询将返回 zero 行,而不是空行。所以,很明显,你做错了什么。
  • 如果你得到 1 行返回,你能看到值是什么吗?也许这将有助于解决问题。基本上,在执行那行代码的时候,有一行数据,所以找出它是什么。
  • 如果数据库为空值,则此代码“if (ds != null && ds.Tables[0].Rows.Count > 0)”返回错误。
  • @Trey - 我的 SQL 已经有了 isnull。

标签: c# sql-server dataset rowcount


【解决方案1】:

为了避免错误:

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.
      }
 }

【讨论】:

    【解决方案2】:

    我需要添加的只是对“LicenseID ''”的额外检查。 “LicenseID IS NOT NULL”是不够的,因为有记录满足所有标准但 LicenseID =“”。我相信这不是 Oracle 数据库的问题,但在切换到 SQL Server 后证明是一个问题。感谢您的所有 cmets 和建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 2018-03-24
      • 2020-09-27
      • 1970-01-01
      • 2021-07-18
      相关资源
      最近更新 更多