首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#中的MySQLDataReader检索空值问题

c#中的MySQLDataReader检索空值问题
EN

Stack Overflow用户
提问于 2011-08-09 23:42:39
回答 6查看 23K关注 0票数 10

我目前正在做一个导出MySQL数据的C#项目。导出是针对服务器中的任何数据库的,因此我不会知道表中有哪些字段和数据类型,也不会知道表中的字段是否允许空值。

在测试过程中,我发现导出工作正常,但是如果字段允许null,当mysql数据读取器访问为null的行时,它会显示错误SqlNullValueException,data is null。

我已经尝试执行if (reader.getString(field) == null) {},但它仍然显示错误。

如何处理数据库中的空值。

感谢您能提供的任何帮助。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-09 23:45:04

您需要在读取器中显式地测试null,因此:

代码语言:javascript
复制
if (!reader.IsDbNull(field)) {
    var value = reader.GetString(field);
    // ... do stuff here ...
}
票数 22
EN

Stack Overflow用户

发布于 2012-10-16 16:17:34

这篇博文为读者提供了一个很好的扩展方法

SQL Data Reader - handling Null column values

我将其更改为IDataReader接口

代码语言:javascript
复制
public static string GetStringSafe(this IDataReader reader, int colIndex)
    {
        return GetStringSafe(reader, colIndex, string.Empty);
    }

    public static string GetStringSafe(this IDataReader reader, int colIndex, string defaultValue)
    {
        if (!reader.IsDBNull(colIndex))
            return reader.GetString(colIndex);
        else
            return defaultValue;
    }

    public static string GetStringSafe(this IDataReader reader, string indexName)
    {
        return GetStringSafe(reader, reader.GetOrdinal(indexName));
    }

    public static string GetStringSafe(this IDataReader reader, string indexName, string defaultValue)
    {
        return GetStringSafe(reader, reader.GetOrdinal(indexName), defaultValue);
    }
票数 4
EN

Stack Overflow用户

发布于 2011-08-09 23:55:25

.Net不使用null文本来区分数据库nulls。我只能推测,但我怀疑原因是许多常见的数据库列类型(int、float等)都是值类型,将值类型与null进行比较根本不会像您期望的那样工作。

相反,请检查DBNull.Value或使用.IsDbNull()函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6998919

复制
相关文章

相似问题

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