1

次のように DataReader と StringBuilder (C#.NET) を使用しています。

while (reader.Read())
{
    sb.AppendFormat("{0},{1},{2},",reader["Col1"], reader["Col2"], reader["Col3"]);
}

これは私の使用には最適ですが、行がnullの場合、単に「」ではなく「null」を返す必要があります。それを達成するための良い方法は何ですか?

提案は非常に高く評価されています

4

4 に答える 4

4
reader["Col1"] == DBNull.Value ? "null" : Convert.ToString(reader["Col1"])
于 2010-05-05T12:36:04.020 に答える
4

試す:

Convert.IsDBNull(reader["Col1"]) ? "null" : reader["Col1"]

または、これを繰り返し使用する場合、これはおそらく、スコープが厳密な拡張メソッドの理想的な候補です。たとえば、次のようになります。

public static class ExtensionMethods
{
    public static object GetValueOrNull(this SqlDataReader reader, string key)
    {
        return Convert.IsDBNull(reader[key]) ? (object)"null" : reader[key];
    }
}

したがって、次のように書くことができます。

var valueOfReader = reader.GetValueOrNull("Col1");

1回の呼び出しでこのロジックを複数回使用する必要がある場合、これは間違いなく物事を整理しますStringBuilder.AppendFormat:

while (reader.Read())
{
    sb.AppendFormat("{0},{1},{2},",reader.GetValueOrNull("Col1"), reader.GetValueOrNull("Col2"), reader.GetvalueOrNull("Col3"));
}
于 2010-05-05T12:38:17.967 に答える
1
reader.IsDBNull(indexOfColumn) ? "null" : reader[indexOfColumn].ToString();
于 2010-05-05T12:38:56.403 に答える
1
(string)reader["Col1"] ?? "null"
于 2010-05-05T12:40:01.157 に答える