SqlDataReader.GetString和sqlnullvalueexception

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

if (!sqlDataReader.IsDBNull(n)) value = r.GetString(n); 

有更好的编码方式吗?

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

 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)); } } 

你可以这样打电话:

 value = reader.GetStringOrNull(n); 

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

 value = r[n] as string; 

如果数据库中的值为null,则r[n]将返回DBNull.Value,并且强制转换为string将返回null

如果你想避免任何例外,那真的是最好的方法。 您需要确定空字段是否代表代码中的exception情况 – 如果不是则表示使用此方法。 如果确实如此,那么我建议您允许抛出exception或捕获exception并将其包装在更具意义的exception中并抛出该exception。

但要知道的主要事情是,当空字段不代表应用程序域中的exception情况时,这是从数据读取器检索值的标准方法。

这对我有用:

 value = reader.GetValue(n).ToString();