SqlDataReader.GetString和sqlnullvalueexception

Rej*_*ran 26 .net c#

我是C#的新手.我正在使用System.Data.SqlClient类从数据库表执行一些select查询.执行一些select查询时,我得到了sqlnullvalueexception.在谷歌搜索我发现如果数据库中的值为null,SqlDataReader.GetString(或它的变体)将抛出sqlnullvalueexception.这个最好的编码方法是什么?

if (!sqlDataReader.IsDBNull(n)) value = r.GetString(n);
Run Code Online (Sandbox Code Playgroud)

有更好的编码方式吗?

Tom*_*ier 42

如果您不想重复这一点,只需创建一个辅助函数,如下所示:

public static class DataReaderExtensions
{
    public static string GetStringOrNull(this IDataReader reader, int ordinal)
    {
        return reader.IsDBNull(ordinal) ? null : reader.GetString(ordinal);
    }

    public static string GetStringOrNull(this IDataReader reader, string columnName)
    {
        return reader.GetStringOrNull(reader.GetOrdinal(columnName));
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以这样打电话:

value = reader.GetStringOrNull(n);
Run Code Online (Sandbox Code Playgroud)

  • 你确定第二个方法reader.IsDBNull(columnName)?我认为它只需要一个序数. (2认同)

Tho*_*que 13

你发布的代码很好.你也可以这样做:

value = r[n] as string;
Run Code Online (Sandbox Code Playgroud)

如果在数据库中的值是零,r[n]将返回DBNull.Value,和演员来string将返回null.