簡體   English   中英

使用閱讀器檢查字段是否包含空值

[英]using reader to check if a field contains null value

我想知道如何檢查字段是否包含空值並將其替換為文本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:

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上鍵入時的偽代碼):

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

例如,字符串myData = reader.IsDbNull(fieldname)嗎? “”:reader.GetString(fieldname)

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

這樣更有效,並最大程度地減少了鑄造。 為了獲得最大效率,您還應該使用字段索引而不是字段名稱。 每次使用字段名稱時,都必須計算索引:reader(“ Date”)是reader.GetValue(reader.GetOrdinal(“ Date”))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM