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

How to handle null values from SQLite DB with C#?

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

所以我有一个 class 具有以下构造函数:

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");
    }

注意我有 2 个用 / 注释掉了那是因为如果我不这样做它们 return 空值,即使我尝试 ''row.Field([Whatever]).GetValueOrDefault()'',它仍然会出现空值并且我的构造函数 return 为空。我的数据库也设置了默认值,所以我知道出了什么问题。 有人有解决办法吗? :)

首先检查 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) 页面。

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

结合起来
  Paid = row.IsNull("Paid") ? 0 : row.Field<int>("Paid");

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

创建您自己的执行简单检查的小函数。

大致如下: public 整数 GetNumber(对象值) { 如果(IsNumeric(val)) { return 瓦尔; } 别的 { return 0; } }

我对 C# 不是很了解,但这应该能让您有所了解。抱歉格式化,我正在使用 phone,这根本没有帮助。

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

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

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

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