如何使用C#处理SQLite DB中的空值?

时间:2015-01-13 13:50:40

标签: c# wpf

EDIT:
Thanks to everyone who replied! I appreciate all of your answers :)

所以我有一个带有以下构造函数的类:

public Transaction(DataRow row)
    {
        LastName = row.Field<string>("LastName");
        FirstName = row.Field<string>("FirstName");
        MI = row.ItemArray[3].ToString()[0];
        ContactNumber = row.ItemArray[4].ToString();
        Hours = int.Parse(row.ItemArray[5].ToString());
        CheckIn = (DateTime)row.ItemArray[6];
        roomNumber = int.Parse(row.ItemArray[9].ToString());
        //Paid = row.Field<int>("Paid");
        //TotalBill = row.Field<int>("TotalBill");
    }

请注意我有两个人用/&#39; s注释掉了因为如果我不这样做,即使我尝试了#row;&#39; row.Field ([Whatever])。GetValueOrDefault()&#39;&#39;,它仍然是null,我的构造函数返回null。我的数据库设置也有默认值,所以IDK有什么不对。 有人有工作吗? :)

4 个答案:

答案 0 :(得分:3)

DataRow类有一个名为IsNull的方法,可以接收列名。 只需将它与条件运算符

组合即可
  Paid = row.IsNull("Paid") ? 0 : row.Field<int>("Paid");

对于可能包含空值的所有其他字段也是如此。

答案 1 :(得分:2)

首先检查null并提供默认值:

public Transaction(DataRow row)
{
    LastName = row.Field<string>("LastName");
    FirstName = row.Field<string>("FirstName");
    MI = row.ItemArray[3].ToString()[0];
    ContactNumber = row.ItemArray[4].ToString();
    Hours = int.Parse(row.ItemArray[5].ToString());
    CheckIn = (DateTime)row.ItemArray[6];
    roomNumber = int.Parse(row.ItemArray[9].ToString());
    Paid = row.Field<int?>("Paid") ?? 0;
    TotalBill = row.Field<int?>("TotalBill") ?? 0;
}

有关??运营商的详细信息,请参阅MSDN上的?? Operator (C# Reference)页面。

答案 2 :(得分:1)

您可以简单地使用Nullable类型和GetValueOrDefault方法,或使用null合并运算符。

Paid = row.Field<int?>("Paid").GetValueOrDefault()

Paid = row.Field<int?>("Paid") ?? 0

在这两种情况下,Paid的值都为0,您可以根据需要进行更改。

答案 3 :(得分:0)

创建自己的小功能,进行简单的检查。

遵循:     public integer GetNumber(object val)     {            if(IsNumeric(val))         {            返回;         其他         {            返回0;          }     }

我对C#并不精彩,但这应该会给你一个想法。对格式化感到抱歉,我正在使用完全没有帮助的手机。