列の SQL データ型を CLR の同等のデータ型にマップする C# 関数を持っている人はいますか? 質問する

列の SQL データ型を CLR の同等のデータ型にマップする C# 関数を持っている人はいますか? 質問する

私は、MSSQLストアドプロシージャからクラスを生成するために、SQLデータ型をCLRデータ型に変換する大規模なswitch()文を書こうとしています。このチャート参考までに。おそらく丸一日かかり、完全にテストするには大変な苦労となるであろう作業に入る前に、SO コミュニティに呼びかけて、この一見一般的で間違いなく面倒なタスクを実行するために C# で何かを既に書いたり見つけたりした人がいないか確認したいと思います。

ベストアンサー1

これは私たちが使用しているものです。微調整する必要があるかもしれませんが (例: null 可能/null 不可能な型など)、入力のほとんどを省くことができます。

public static Type GetClrType(SqlDbType sqlType)
{
    switch (sqlType)
    {
        case SqlDbType.BigInt:
            return typeof(long?);

        case SqlDbType.Binary:
        case SqlDbType.Image:
        case SqlDbType.Timestamp:
        case SqlDbType.VarBinary:
            return typeof(byte[]);

        case SqlDbType.Bit:
            return typeof(bool?);

        case SqlDbType.Char:
        case SqlDbType.NChar:
        case SqlDbType.NText:
        case SqlDbType.NVarChar:
        case SqlDbType.Text:
        case SqlDbType.VarChar:
        case SqlDbType.Xml:
            return typeof(string);

        case SqlDbType.DateTime:
        case SqlDbType.SmallDateTime:
        case SqlDbType.Date:
        case SqlDbType.Time:
        case SqlDbType.DateTime2:
            return typeof(DateTime?);

        case SqlDbType.Decimal:
        case SqlDbType.Money:
        case SqlDbType.SmallMoney:
            return typeof(decimal?);

        case SqlDbType.Float:
            return typeof(double?);

        case SqlDbType.Int:
            return typeof(int?);

        case SqlDbType.Real:
            return typeof(float?);

        case SqlDbType.UniqueIdentifier:
            return typeof(Guid?);

        case SqlDbType.SmallInt:
            return typeof(short?);

        case SqlDbType.TinyInt:
            return typeof(byte?);

        case SqlDbType.Variant:
        case SqlDbType.Udt:
            return typeof(object);

        case SqlDbType.Structured:
            return typeof(DataTable);

        case SqlDbType.DateTimeOffset:
            return typeof(DateTimeOffset?);

        default:
            throw new ArgumentOutOfRangeException("sqlType");
    }
}

おすすめ記事