c# - ファイル - ヌル可能なGUID



guid newguid>() (7)

ADO.NET APIには、null可能な値の型を扱うときに問題があります(つまり、正しく機能しない)。 私たちはそれに問題がないので、手動で値をnullに設定するのが最善であるという結論に達しました。

myNewRow.myGuidColumn = myGuid == null ? (object)DBNull.Value : myGuid.Value

ADO.NETが処理すべき厄介な余分な作業ですが、(3.5 SP1でも)信頼性の高い方法ではないようです。 これは少なくとも正しく動作します。

NULL値の型をSqlParametersに渡す際に問題が発生しました。この場合、生成されたSQLには値の代わりにキーワードDEFAULT含まれているため、パラメータを構築する際に同じ方法をお勧めします。

私のデータベースでは、テーブルの1つにGUID列にnullを使用できます。 私はGuidのメソッドを持っていますか? 新しいデータ行をテーブルに挿入するパラメータ。 しかし、私はmyNewRow.myGuidColumn = myGuidと言うとき、私は次のエラーが発生します: "暗黙のうちに 'System.Guid型を変換できませんか?' 「System.Guid」に変更してください。


Answer #1

Greg Beechの答えと同じ

myNewRow.myGuidColumn = (object)myGuid ?? DBNull.Value

Answer #2

System.Guid.Emptyをnullにしたい場所で試してみてください


Answer #3

null nullable Guid nullをキャストする必要があります。

myRecord.myGuidCol = (myGuid == null) ? (Guid?)null : myGuid.Value

Answer #4

または:

    internal static T CastTo<T>(object value)
    {
        return value != DBNull.Value ? (T)value : default(T);
    }

Answer #5

ヘルパーメソッドを使用することができます:

public static class Ado {
    public static void SetParameterValue<T>( IDataParameter parameter, T? value ) where T : struct {
        if ( null == value ) { parameter.Value = DBNull.Value; }
        else { parameter.Value = value.Value; }
    }
    public static void SetParameterValue( IDataParameter parameter, string value ) {
        if ( null == value ) { parameter.Value = DBNull.Value; }
        else { parameter.Value = value; }
    }
}

Answer #6
Guid? _field = null;
if (myValue!="")//test if myValue has value
{
_field = Guid.Parse(myValue)
}




nullable