2

基本的にmysqlサーバー上のblobレコードを検索するアプリを作成しました。何らかの理由でblobフィールドが空の場合、アプリがクラッシュするという問題があります。私は次のようなことを考えました

私は現在持っています

byte[] data = (byte[])DbReader[2];

しかし、私は次のようなことをする方法があるかどうか疑問に思いました

if (DbReader.IsDbNull(2)
    byte[] data = /* DEFAULT VALUE */
else
    byte[] data = (byte[])DbReader[2];

しかし、デフォルト値を設定できますか?iveが試みたすべてが失敗します:(

4

4 に答える 4

5

これはどう:

byte[] data = null;

配列は参照型であるため、配列にnullを割り当てることができます。後で、次のようにデータがnullであるかどうかを確認できます。

if(data != null)
{
    //there is data inside that array, you can go ahead and use it.
}

編集:簡略化

次のようにコードを簡略化できます。

byte[] data = DbReader.IsDbNull(2) ? null : (byte[])DbReader[2];
于 2012-07-04T16:37:20.230 に答える
1

空の配列として設定できます。

byte[] data = new byte[0];
于 2012-07-04T16:40:26.080 に答える
1

複数の場所で使用する場合は、拡張メソッドにカプセル化できます...

public static class DbDataReaderExt {
    public static T GetOrDefault<T>(this DbDataReader reader, int index, T default_value = default(T)) {
        if (reader.IsDBNull(index))
            return default_value;
        return (T)reader[index];
    }
}

...そしてこのように使用します...

var data = reader.GetOrDefault<byte[]>(2);

...またはこのように:

var data = reader.GetOrDefault(2, new byte[] { 1, 2, 3 });

ところで、これは非byte[]タイプでも機能するはずです。

于 2012-07-04T17:42:13.763 に答える
0

IsDBNullメソッドを試すことができます。

object value = DbReader[2];
byte[] data = ... some default value
if (!Convert.IsDBNull(value))
{
    data = (byte[])value;
}
于 2012-07-04T16:41:29.563 に答える