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

 

【1】字符串检测

你需要检查null

if(!SqlReader.IsDBNull(indexFirstName))
{
  employee.FirstName = sqlreader.GetString(indexFirstName);
}

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

我将这些内容包装到扩展方法中,如果列确实是null,则往往返回默认值:

public static string SafeGetString(this SqlDataReader reader, int colIndex)
{
   if(!reader.IsDBNull(colIndex))
       return reader.GetString(colIndex);
   return string.Empty;
}

现在你可以像这样调用它:

employee.FirstName = SqlReader.SafeGetString(indexFirstName);

而且你永远不必担心异常或null值。

 

【2】int检测

您应该使用as运算符和??运算符作为默认值。 值类型需要被读取为可空并且给定默认值。

employee.FirstName = sqlreader[indexFirstName] as string;
employee.Age = sqlreader[indexAge] as int? ?? default(int);

as运算符处理转换,包括检查DBNull。

 

【3】综合一下,需要测试

对于字符串,您可以简单地转换对象版本(使用数组运算符访问)并使用空字符串为null:

employee.FirstName = (string)sqlreader[indexFirstName];

要么

employee.FirstName = sqlreader[indexFirstName] as string;

对于整数,如果转换为可以为null的int,则可以使用GetValueOrDefault()

employee.Age = (sqlreader[indexAge] as int?).GetValueOrDefault();

或null-coalescing运算符(??)。

employee.Age = (sqlreader[indexAge] as int?) ?? 0;

 

 

 

posted @   funiyi816  阅读(105)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示