我需要找到将Npgsql类型(以文本形式给出)转换为C#Type对象的方法。 代码示例:
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对象 最简单的方法是创建一个非常长的“if else”,但在我看来,这是解决它的最糟糕的方法:(
也许有人知道我该怎么办? :)
答案 0 :(得分:3)
我希望有,但我怀疑没有。我有一个用于生成POCO的迷你ORM,我使用映射结构来实现这一点 - 将DbType
转换为它映射到的各种其他类型。这并没有直接回答你的问题(因为我担心没有),但它确实为我们回复了我认为是你想要解决的解决方案的邮件。
datatype system_enum csharp_dbtype postgres_enum
array DbType.Object Array NpgsqlDbType.Array
bigint DbType.Int64 Int64 NpgsqlDbType.Bigint
bit DbType.Boolean Boolean NpgsqlDbType.Bit
bool DbType.Boolean Boolean NpgsqlDbType.Boolean
boolean DbType.Boolean Boolean NpgsqlDbType.Boolean
Box DbType.Object Object NpgsqlDbType.Box
bpchar DbType.String String NpgsqlDbType.Text
_bpchar DbType.String[] String[] NpgsqlDbType.Array | NpgsqlDbType.Text
bytea DbType.Binary Byte[] NpgsqlDbType.Bytea
character DbType.String String NpgsqlDbType.Char
character varying DbType.String String NpgsqlDbType.Varchar
Circle DbType.Object Object NpgsqlDbType.Circle
date DbType.DateTime DateTime NpgsqlDbType.Date
float4 DbType.Single Single NpgsqlDbType.Real
float8 DbType.Double Double NpgsqlDbType.Double
inet DbType.Object IPAddress NpgsqlDbType.Inet
int2 DbType.Int16 Int16 NpgsqlDbType.Smallint
_int2 DbType.Int16[] Int16[] NpgsqlDbType.Array | NpgsqlDbType.SmallInt
int4 DbType.Int32 Int32 NpgsqlDbType.Integer
_int4 DbType.Int32[] Int32[] NpgsqlDbType.Array | NpgsqlDbType.Integer
int8 DbType.Int64 Int64 NpgsqlDbType.Bigint
_int8 DbType.Int64[] Int64[] NpgsqlDbType.Array | NpgsqlDbType.BigInt
integer DbType.Int32 Int32 NpgsqlDbType.Integer
interval DbType.Object TimeSpan NpgsqlDbType.Interval
Line DbType.Object Object NpgsqlDbType.Line
LSeg DbType.Object Object NpgsqlDbType.LSeg
money DbType.Decimal Decimal NpgsqlDbType.Money
numeric DbType.Decimal Decimal NpgsqlDbType.Numeric
Path DbType.Object Object NpgsqlDbType.Path
Point DbType.Object Object NpgsqlDbType.Point
Polygon DbType.Object Object NpgsqlDbType.Polygon
public.citext DbType.String String NpgsqlDbType.Text
smallint DbType.Int16 Int16 NpgsqlDbType.Smallint
text DbType.String String NpgsqlDbType.Text
_text DbType.String[] String[] NpgsqlDbType.Array | NpgsqlDbType.Text
time DbType.Time DateTime NpgsqlDbType.Time
timestamp DbType.DateTime DateTime NpgsqlDbType.Timestamp
_timestamp DbType.DateTime[] DateTime[] NpgsqlDbType.Array | NpgsqlDbType.Timestamp
timestamptz DbType.DateTime DateTime NpgsqlDbType.TimestampTZ
timetz DbType.Time DateTime NpgsqlDbType.Time
unknown DbType.String String NpgsqlDbType.Text
uuid DbType.Guid Guid NpgsqlDbType.Uuid
varchar DbType.String String NpgsqlDbType.Varchar
_varchar DbType.String[] String[] NpgsqlDbType.Array | NpgsqlDbType.Varchar
xml DbType.Xml Xml.XmlDocument NpgsqlDbType.Xml
这绝不是全面的,但是当我们找到一个我们以前没见过的dbtype时,我们只需将它添加到地图中。
“数据类型”列是从NpgsqlDataReader.GetDataTypeName(i)
得到的。