10

私は現在、MySQLデータをエクスポートするC#プロジェクトに取り組んでいます。エクスポートはサーバー内の任意のデータベースに対するものであるため、テーブル内のフィールドとデータ型はわかりません。また、テーブル内のフィールドでnull値が許可されているかどうかもわかりません。

テスト中に、エクスポートが正常に機能していることがわかりましたが、mysqlデータリーダーがnullの行に到達したときにフィールドがnullを許可すると、エラーSqlNullValueExceptionが表示され、データはnullになります。

試しif (reader.getString(field) == null) {}ましたが、まだエラーが表示されています。

データベース内のNull値に対処するにはどうすればよいですか。

あなたが提供できるどんな助けにも感謝します。

4

6 に答える 6

22

リーダーで明示的にnullをテストする必要があるため、次のようになります。

if (!reader.IsDbNull(field)) {
    var value = reader.GetString(field);
    // ... do stuff here ...
}
于 2011-08-09T15:45:04.477 に答える
4

このブログ投稿には、読者のための優れた拡張方法があります

SQLデータリーダー-Null列値の処理

IDataReaderインターフェイスに変更しました

public static string GetStringSafe(this IDataReader reader, int colIndex)
    {
        return GetStringSafe(reader, colIndex, string.Empty);
    }

    public static string GetStringSafe(this IDataReader reader, int colIndex, string defaultValue)
    {
        if (!reader.IsDBNull(colIndex))
            return reader.GetString(colIndex);
        else
            return defaultValue;
    }

    public static string GetStringSafe(this IDataReader reader, string indexName)
    {
        return GetStringSafe(reader, reader.GetOrdinal(indexName));
    }

    public static string GetStringSafe(this IDataReader reader, string indexName, string defaultValue)
    {
        return GetStringSafe(reader, reader.GetOrdinal(indexName), defaultValue);
    }
于 2012-10-16T08:17:33.923 に答える
2

null.Netは、データベースのnullを区別するためにリテラルを使用しません。推測することしかできませんが、その理由は、多くの一般的なデータベース列型(int、floatなど)が値型であり、値型をnullと比較しても期待どおりに機能しないためだと思います。

代わりにDBNull.Value、関数を確認または使用してください.IsDbNull()

于 2011-08-09T15:55:24.603 に答える
1

null値を許可するフィールドでGetString()メソッドを使用する際に問題が発生しました。私は次のようなことをしてこれを回避しました:

reader[0].ToString()

于 2011-08-09T17:29:36.923 に答える
1

いつでもc#条件演算子'?'を使用できます そのようです...

string val = (reader.IsDBNull(columnIndex)) ? "" : reader.GetString(columnIndex);
于 2015-02-27T00:44:15.280 に答える
0

NULLフィールドから取得するオブジェクトをDBNull.Valueと比較できます

于 2013-01-11T10:33:11.420 に答える