首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL数据读取器-处理空列值

SQL数据读取器-处理空列值
EN

Stack Overflow用户
提问于 2009-11-21 01:24:34
回答 30查看 429.6K关注 0票数 333

我正在使用SQLdatareader从数据库构建POCOs。代码可以正常工作,除非它在数据库中遇到空值。例如,如果数据库中的FirstName列包含空值,则会引发异常。

代码语言:javascript
运行
复制
employee.FirstName = sqlreader.GetString(indexFirstName);

在这种情况下,处理空值的最佳方法是什么?

EN

回答 30

Stack Overflow用户

回答已采纳

发布于 2009-11-21 01:25:53

您需要检查IsDBNull

代码语言:javascript
运行
复制
if(!SqlReader.IsDBNull(indexFirstName))
{
  employee.FirstName = sqlreader.GetString(indexFirstName);
}

这是检测和处理这种情况的唯一可靠方法。

我将这些内容包装到扩展方法中,如果列确实为null,则倾向于返回默认值

代码语言:javascript
运行
复制
public static string SafeGetString(this SqlDataReader reader, int colIndex)
{
   if(!reader.IsDBNull(colIndex))
       return reader.GetString(colIndex);
   return string.Empty;
}

现在你可以这样叫它:

代码语言:javascript
运行
复制
employee.FirstName = SqlReader.SafeGetString(indexFirstName);

而且您再也不用担心异常或null值了。

票数 531
EN

Stack Overflow用户

发布于 2010-07-22 19:54:22

对于默认值,应该结合使用as运算符和??运算符。值类型将需要被读取为可空的,并给出默认值。

代码语言:javascript
运行
复制
employee.FirstName = sqlreader[indexFirstName] as string;
employee.Age = sqlreader[indexAge] as int? ?? default(int);

as操作符处理类型转换,包括对DBNull的检查。

票数 235
EN

Stack Overflow用户

发布于 2014-10-07 23:10:48

代码语言:javascript
运行
复制
employee.FirstName = sqlreader[indexFirstName] as string;

对于整数,如果强制转换为可以为空的整数,则可以使用GetValueOrDefault()

代码语言:javascript
运行
复制
employee.Age = (sqlreader[indexAge] as int?).GetValueOrDefault();

或空合并运算符(??)。

代码语言:javascript
运行
复制
employee.Age = (sqlreader[indexAge] as int?) ?? 0;
票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1772025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档