我是C#的新手。我正在使用System.Data.SqlClient类从数据库表执行一些select查询。执行一些select查询时,我得到了sqlnullvalueexception。在谷歌搜索我发现如果数据库中的值为null,SqlDataReader.GetString(或它的变体)将抛出sqlnullvalueexception。 对此最好的编码实践是什么?
if (!sqlDataReader.IsDBNull(n)) value = r.GetString(n);
有更好的编码方式吗?
答案 0 :(得分: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));
}
}
你可以这样打电话:
value = reader.GetStringOrNull(n);
答案 1 :(得分:13)
您发布的代码很好。你也可以这样做:
value = r[n] as string;
如果数据库中的值为null,r[n]
将返回DBNull.Value,而string
的强制转换将返回null
。
答案 2 :(得分:3)
如果你想避免任何例外,那真的是最好的方法。您需要确定空字段是否代表代码中的异常情况 - 如果不是则表示使用此方法。如果确实如此,那么我建议您允许抛出异常或捕获异常并将其包装在更具意义的异常中并抛出该异常。
但最重要的是要知道,当空字段不代表应用程序域中的异常情况时,这是从数据读取器检索值的标准方法。
答案 3 :(得分:3)
这对我有用:
value = reader.GetValue(n).ToString();