使用 Reader 检查字段是否包含空值

本文关键字:包含 空值 是否 字段 Reader 检查 使用 | 更新日期: 2023-09-27 18:35:58

我想知道如何检查字段是否包含空值并将其替换为文本 N/A 或者只是不显示该字段。但是如果字段包含 null,我不希望代码中断,我希望它继续,直到所有字段都填充一个值。

C# 代码

using (var connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
    using (var command = connection.CreateCommand())
    {
        command.CommandText = "SELECT FirstName, LastName, Date FROM EOI WHERE (FormID = '13')";
        connection.Open();
        using (var reader = command.ExecuteReader())
        {
            while(reader.Read())
            {
                Label1.Text = reader["FirstName"].ToString();
                Label2.Text = reader["LastName"].ToString();
                DateTime Text = Convert.ToDateTime(reader["Date"]);
                Label3.Text = Text.ToString("d");
            }
        }
    }

使用 Reader 检查字段是否包含空值

您可以在 C# 中检查这一点:

if(reader["FirstName"]==null)
{
 // Do something
}

或在带有 ISNULL 的 T-SQL 中:

SELECT ISNULL(FirstName,'N/A'), ISNULL(LastName,'N/A'), Date FROM EOI

我假设您将遇到问题的空值是Date列。 C# 中的 DateTime 不能为 null,因为它是一个结构。 您可能希望将其转换为可为空的日期时间:

DateTime? date = (DateTime?)reader["Date"];

现在由您在将其转换为字符串时执行逻辑:

dateLabel.Text = date != null ? date.Value.ToString("d") : "N/A";

对于字符串列,只需按如下方式重写它,因为字符串已经可为空:

firstNameLabel.Text = (string)reader["FirstName"] ?? "N/A";

您可以签入 select 语句或代码。 在 SQL 中:

SELECT IsNull(FirstName, 'N/A') as FirstName, 
        Coalesce(LastName, 'N/A') as LastName, Date FROM EOI WHERE (FormID = '13');

在 .Net 中,您需要将其与 DbNull.Value 进行比较:

Label1.Text = reader["FirstName"] == DBNull.Value ? "N/A" :  Convert.ToString(reader["FirstName"]);

请注意,在上面的例子中,Convert.ToString() 会将空值转换为空字符串。 这是您可以做的第三个示例。

如果你事先知道类型,你可以使用(伪代码,因为我在iPhone上输入):

已知类型 myData = 读取器。IsDbNull(字段名称) ?我的默认值:读取器。GetKnownType(fieldname)

例如字符串 myData = 读取器。IsDbNull(字段名称) ?" : 阅读器。获取字符串(字段名称)

字符串日期值 = 读取器。IsDbNull(字段名称) ?"没有日期":读者。获取日期(字段名称)。ToString()

这样效率更高,并最大限度地减少了铸造。为了获得最大效率,您还应该使用字段索引而不是字段名称。每次使用字段名称时,都必须计算索引:读者("日期")是读者。GetValue(reader.GetOrdinal("Date"))