如何使用 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
,您可以根据需要进行更改。
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
,您可以根据需要进行更改。