我经常在处理从 SqlDataAdapters
返回的 DataRows
时遇到问题。当我尝试使用如下代码填充对象时:
DataRow row = ds.Tables[0].Rows[0];
string value = (string)row;
在这种情况下,处理 DBNull 的
的最佳方法是什么。
最佳答案
可为空的类型很好,但仅适用于不可为空的类型。
要使类型“可为空”,请在类型后附加一个问号,例如:
int? value = 5;
我还建议使用“as
”关键字而不是转换。您只能在可空类型上使用“as”关键字,因此请确保您正在强制转换已经可以为空的内容(如字符串),或者您使用如上所述的可空类型。这样做的原因是
- 如果类型可为空,则“
as
”关键字在值为DBNull
时返回null
。 - 是 ever-so-slightly faster than casting虽然only in certain cases .这本身永远不是使用
as
的充分理由,但结合上述原因它是有用的。
我建议这样做
DataRow row = ds.Tables[0].Rows[0];
string value = row as string;
在上面的例子中,如果 row
返回为 DBNull
,那么 value
将变为 null
而不是抛出异常。请注意,如果您的数据库查询更改了返回的列/类型,使用 as
将导致您的代码无声地失败并使值简单 null
而不是在返回不正确的数据时抛出适当的异常,因此建议您进行测试以其他方式验证您的查询,以确保随着代码库的发展数据的完整性。
关于c# - 处理 DBNull 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26809/