1

我想知道如何检查字段是否包含空值并将其替换为文本 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");
            }
        }
    }
4

4 回答 4

1

您可以在 C# 中进行检查:

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

或在带有ISNULL的 T-SQL 中:

SELECT ISNULL(FirstName,'N/A'), ISNULL(LastName,'N/A'), Date FROM EOI
于 2013-10-19T06:36:48.127 回答
1

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

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

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

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

对于字符串列,只需将其重写如下,因为字符串已经可以为空:

firstNameLabel.Text = (string)reader["FirstName"] ?? "N/A";
于 2013-10-19T06:37:57.333 回答
0

您可以签入您的选择语句或代码。在 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() 会将空值转换为空字符串。这是您可以做的第三个示例。

于 2013-10-19T06:39:14.123 回答
0

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

KnownType myData = reader.IsDbNull(fieldname) ?MyDefaultValue : reader.GetKnownType(fieldname)

例如 String myData = reader.IsDbNull(fieldname) ?"" : reader.GetString(fieldname)

字符串 dateValue = reader.IsDbNull(fieldname) ?“没有日期”: reader.GetDate(fieldname).ToString()

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

于 2013-10-19T08:31:53.680 回答