C# SqlDataReader.GetString和sqlnullvalueexception
我是C语言的新手。我使用System.Data.SqlClient类从数据库表执行一些select查询。我在执行一些select查询时得到了sqlnullvalueexception。通过谷歌搜索,我知道如果数据库中的值为null,SqlDataReader.GetString或其变体将抛出sqlnullvalueexception。 这方面的最佳编码实践是什么C# SqlDataReader.GetString和sqlnullvalueexception,c#,.net,C#,.net,我是C语言的新手。我使用System.Data.SqlClient类从数据库表执行一些select查询。我在执行一些select查询时得到了sqlnullvalueexception。通过谷歌搜索,我知道如果数据库中的值为null,SqlDataReader.GetString或其变体将抛出sqlnullvalueexception。 这方面的最佳编码实践是什么 if (!sqlDataReader.IsDBNull(n)) value = r.GetString(n); 有更好的编码方法吗?
if (!sqlDataReader.IsDBNull(n)) value = r.GetString(n);
有更好的编码方法吗?如果您希望避免任何异常,这确实是最好的编码方法。您需要确定空字段是否表示代码中的异常情况-如果它不表示,则使用此方法。如果是这样的话,我建议您要么允许抛出异常,要么捕获异常并将其封装在一个更有意义的异常中并抛出该异常
但要知道的主要问题是,当空字段不代表应用程序域中的异常情况时,这是从数据读取器检索值的标准方法。您发布的代码很好。你也可以这样做:
value = r[n] as string;
如果数据库中的值为null,r[n]将返回DBNull.value,转换为字符串将返回null。如果您不想重复太多,只需创建一个helper函数,如下所示:
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);
你可以这样称呼它:
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 = reader.GetValue(n).ToString();
您确定第二个方法reader.IsDBNullcolumnName吗?我想这只需要一个序数。@AlexanderN-我想你是对的。它应该是reader.IsDBNullreader.GetOrdinalcolumnName