Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlDataReader.GetString和sqlnullvalueexception_C#_.net - Fatal编程技术网

C# 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); 有更好的编码方法吗?

我是C语言的新手。我使用System.Data.SqlClient类从数据库表执行一些select查询。我在执行一些select查询时得到了sqlnullvalueexception。通过谷歌搜索,我知道如果数据库中的值为null,SqlDataReader.GetString或其变体将抛出sqlnullvalueexception。 这方面的最佳编码实践是什么

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