首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >reader.GetDateTime(null)

reader.GetDateTime(null)
EN

Stack Overflow用户
提问于 2015-04-22 19:51:32
回答 4查看 6.1K关注 0票数 4

我正在开发一个应用程序,它将从存储过程中读取并放入工作表中。我的问题是,当我遇到null时,它不会在代码中被处理。

代码语言:javascript
复制
               while (reader.Read())
               {

                   ws.Cells[i, 1] = reader.GetString(0);
                   ws.Cells[i, 2] = reader.GetString(1);
                   ws.Cells[i, 3] = reader.GetString(2);
                   ws.Cells[i, 4] = reader.GetString(3);
                   ws.Cells[i, 5] = reader.GetString(4);
                   ws.Cells[i, 6] = reader.GetString(5);
                   ws.Cells[i, 7] = reader.GetDecimal(6);
                   ws.Cells[i, 8] = reader.GetDateTime(7);
                   ws.Cells[i, 9] = reader.GetDecimal(8);
                   ws.Cells[i, 10] = reader.GetDecimal(9);
                   ws.Cells[i, 11] = reader.GetDecimal(10);
                   ws.Cells[i, 12] = reader.GetDecimal(11);
                   ws.Cells[i, 13] = reader.GetDateTime(12);
                   ws.Cells[i, 13] = reader.GetDateTime(13);
                   i++;
               }
               reader.Close();

如果有人能解释如何处理这个问题,这样我们就可以让单元格为空;谢谢!!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-22 19:54:05

您可以使用reader.IsDBNull检查值是否为null,并在代码中写入条件逻辑。

代码语言:javascript
复制
if (reader.IsDbBull(12)) {
    ws.Cells[i, 13] = "";
} else {
    ws.Cells[i, 13] = reader.GetDateTime(12);
}
票数 5
EN

Stack Overflow用户

发布于 2015-04-22 19:54:45

在尝试从字段读取值之前,可以使用reader.IsDBNull(int)检查字段是否为空。

例如

代码语言:javascript
复制
ws.Cells[i, 1] = reader.IsDBNull(0) ? "Default value when null" : reader.GetString(0);
票数 6
EN

Stack Overflow用户

发布于 2015-04-22 20:01:00

我会创建一个扩展方法来完成这个任务。

类似于:

代码语言:javascript
复制
static class DataReaderExtensions
{
    public static DateTime? TryGetDateTime(this DataTableReader reader, int ordinal)
    {
        return reader.IsDBNull(ordinal) ? null : (DateTime?)reader.GetDateTime(ordinal);
    }
}

那就这样说吧:

代码语言:javascript
复制
ws.Cells[i, 1] = reader.TryGetDateTime(1);

要处理任何数据类型,可以尝试使用泛型:

代码语言:javascript
复制
public static T TryGetValue<T>(this DataTableReader reader, int ordinal)
{
    return reader.IsDBNull(ordinal) ? default(T) : reader.GetFieldValue<T>(ordinal);
}

那就这样说吧:

代码语言:javascript
复制
ws.Cells[i, 1] = reader.TryGetValue<DateTime?>(1);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29807490

复制
相关文章

相似问题

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