2016-12-01 11 views
2

Npgsqlタイプ(テキストとして与えられる)をC#タイプオブジェクトに変換する方法を見つける必要があります。コードの 例:NpgsqlテキストタイプをC#タイプに変換する

public Type ConvertFromNpgsqlType(string a_sNpglsqType) 
{ 
    //TODO 
    if (string.Equals(a_sNpglsqType, "integer") 
    { 
    return typeof(int); 
    } 
    //... 
    return typeof(object); 
} 

と私は、私のように値を持っていたpgsqlのクエリから「a_sNpgsqlType」引数の値を持っている:すべての物事が ...本当に簡単だったが、私はしません

i integer, OUT pass text,(...) 

Npgsqlの文字列型をC#Typeオブジェクトに変換する方法を知っています 最も簡単な方法は「それ以外の場合」ですが、私の意見ではそれを解決する最悪の方法です:(

誰かがそれはできますか?:)

答えて

3

私はそこにいたが、私はそうは思わない。私はPOCOを生成するために使用したミニORMを持っています。これを実現するためにマッピング構造を使用します。DbTypeをマップするさまざまなタイプに変換します。これはあなたの質問に直接答えるものではありませんが(私は恐れていますので)、あなたが取り組もうとしているのと同じ解決策だと私が信じているもののためにメールに答えます。

datatype  system_enum     csharp_dbtype  postgres_enum 
bytea  System.Data.DbType.Binary Byte[]   NpgsqlTypes.NpgsqlDbType.Bytea 
bit   System.Data.DbType.Boolean Boolean   NpgsqlTypes.NpgsqlDbType.Bit 
bool   System.Data.DbType.Boolean Boolean   NpgsqlTypes.NpgsqlDbType.Boolean 
timestamp System.Data.DbType.DateTime DateTime   NpgsqlTypes.NpgsqlDbType.Timestamp 
timestamptz System.Data.DbType.DateTime DateTime   NpgsqlTypes.NpgsqlDbType.TimestampTZ 
date   System.Data.DbType.DateTime DateTime   NpgsqlTypes.NpgsqlDbType.Date 
money  System.Data.DbType.Decimal Decimal   NpgsqlTypes.NpgsqlDbType.Money 
numeric  System.Data.DbType.Decimal Decimal   NpgsqlTypes.NpgsqlDbType.Numeric 
float8  System.Data.DbType.Double Double   NpgsqlTypes.NpgsqlDbType.Double 
uuid   System.Data.DbType.Guid  Guid    NpgsqlTypes.NpgsqlDbType.Uuid 
int2   System.Data.DbType.Int16  Int16    NpgsqlTypes.NpgsqlDbType.Smallint 
_int2  System.Data.DbType.Int16[] Int16[]   NpgsqlDbType.Array | NpgsqlDbType.SmallInt 
int4   System.Data.DbType.Int32  Int32    NpgsqlTypes.NpgsqlDbType.Integer 
_int4  System.Data.DbType.Int32[] Int32[]   NpgsqlDbType.Array | NpgsqlDbType.Integer 
int8   System.Data.DbType.Int64  Int64    NpgsqlTypes.NpgsqlDbType.Bigint 
array  System.Data.DbType.Object Array    NpgsqlTypes.NpgsqlDbType.Array 
Circle  System.Data.DbType.Object Object   NpgsqlTypes.NpgsqlDbType.Circle 
inet   System.Data.DbType.Object IPAddress   NpgsqlTypes.NpgsqlDbType.Inet 
interval  System.Data.DbType.Object TimeSpan   NpgsqlTypes.NpgsqlDbType.Interval 
Line   System.Data.DbType.Object Object   NpgsqlTypes.NpgsqlDbType.Line 
LSeg   System.Data.DbType.Object Object   NpgsqlTypes.NpgsqlDbType.LSeg 
Path   System.Data.DbType.Object Object   NpgsqlTypes.NpgsqlDbType.Path 
Point  System.Data.DbType.Object Object   NpgsqlTypes.NpgsqlDbType.Point 
Polygon  System.Data.DbType.Object Object   NpgsqlTypes.NpgsqlDbType.Polygon 
Box   System.Data.DbType.Object Object   NpgsqlTypes.NpgsqlDbType.Box 
float4  System.Data.DbType.Single Single   NpgsqlTypes.NpgsqlDbType.Real 
text   System.Data.DbType.String String   NpgsqlTypes.NpgsqlDbType.Text 
varchar  System.Data.DbType.String String   NpgsqlTypes.NpgsqlDbType.Varchar 
bpchar  System.Data.DbType.String String   NpgsqlTypes.NpgsqlDbType.Text 
_bpchar  System.Data.DbType.String[] String[]   NpgsqlDbType.Array | NpgsqlDbType.Text 
_varchar  System.Data.DbType.String[] String[]   NpgsqlDbType.Array | NpgsqlDbType.Varchar 
_text  System.Data.DbType.String[] String[]   NpgsqlDbType.Array | NpgsqlDbType.Text 
time   System.Data.DbType.Time  DateTime   NpgsqlTypes.NpgsqlDbType.Time 
timetz  System.Data.DbType.Time  DateTime   NpgsqlTypes.NpgsqlDbType.Time 
xml   System.Data.DbType.Xml  Xml.XmlDocument NpgsqlTypes.NpgsqlDbType.Xml 

これは、包括的な意味するが、我々は我々の前に見ていないDBTYPEを見つけたとき、私たちはマップにそれを追加していないことです。

"データ型"列は、NpgsqlDataReader.GetDataTypeName(i)からの収量です。

関連する問題