使用 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");
}
}
}
您可以在 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"))