[英]Convert Npgsql text type to C# type
我需要找到将 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# 类型对象最简单的方法是创建一个很长的“if else”,但在我看来这是最糟糕的解决方法它:(
也许有人知道我该怎么做? :)
我希望有,但我怀疑没有。 我有一个用于生成 POCO 的 mini-ORM,我使用映射结构来实现这一点——将DbType
转换为它映射到的各种其他类型。 这并没有直接回答您的问题(因为我担心没有),但它确实为我们回答了邮件,因为我认为这与您试图解决的解决方案相同。
datatype system_enum csharp_dbtype postgres_enum
bigint System.Data.DbType.Int64 Int64 NpgsqlTypes.NpgsqlDbType.Bigint
bit System.Data.DbType.Boolean Boolean NpgsqlTypes.NpgsqlDbType.Bit
bool System.Data.DbType.Boolean Boolean NpgsqlTypes.NpgsqlDbType.Boolean
boolean System.Data.DbType.Boolean Boolean NpgsqlTypes.NpgsqlDbType.Boolean
Box System.Data.DbType.Object Object NpgsqlTypes.NpgsqlDbType.Box
bpchar System.Data.DbType.String String NpgsqlTypes.NpgsqlDbType.Text
_bpchar System.Data.DbType.String[] String[] NpgsqlDbType.Array | NpgsqlDbType.Text
bytea System.Data.DbType.Binary Byte[] NpgsqlTypes.NpgsqlDbType.Bytea
character System.Data.DbType.String String NpgsqlTypes.NpgsqlDbType.Char
character varying System.Data.DbType.String String NpgsqlTypes.NpgsqlDbType.Varchar
Circle System.Data.DbType.Object Object NpgsqlTypes.NpgsqlDbType.Circle
date System.Data.DbType.DateTime DateTime NpgsqlTypes.NpgsqlDbType.Date
float4 System.Data.DbType.Single Single NpgsqlTypes.NpgsqlDbType.Real
float8 System.Data.DbType.Double Double NpgsqlTypes.NpgsqlDbType.Double
inet System.Data.DbType.Object IPAddress NpgsqlTypes.NpgsqlDbType.Inet
_int2 System.Data.DbType.Int16[] Int16[] NpgsqlDbType.Array | NpgsqlDbType.SmallInt
int2 System.Data.DbType.Int16 Int16 NpgsqlTypes.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
_int8 System.Data.DbType.Int64[] Int64[] NpgsqlDbType.Array | NpgsqlDbType.BigInt
integer System.Data.DbType.Int32 Int32 NpgsqlTypes.NpgsqlDbType.Integer
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
money System.Data.DbType.Decimal Decimal NpgsqlTypes.NpgsqlDbType.Money
name System.Data.DbType.String String NpgsqlTypes.NpgsqlDbType.Name
numeric System.Data.DbType.Decimal Decimal NpgsqlTypes.NpgsqlDbType.Numeric
oid System.Data.DbType.UInt32 uint NpgsqlTypes.NpgsqlDbType.Oid
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
public.citext System.Data.DbType.String String NpgsqlTypes.NpgsqlDbType.Text
smallint System.Data.DbType.Int16 Int16 NpgsqlTypes.NpgsqlDbType.Smallint
_text System.Data.DbType.String[] String[] NpgsqlDbType.Array | NpgsqlDbType.Text
text System.Data.DbType.String String NpgsqlTypes.NpgsqlDbType.Text
time System.Data.DbType.Time DateTime NpgsqlTypes.NpgsqlDbType.Time
_timestamp System.Data.DbType.DateTime[] DateTime[] NpgsqlDbType.Array | NpgsqlDbType.Timestamp
timestamp System.Data.DbType.DateTime DateTime NpgsqlTypes.NpgsqlDbType.Timestamp
timestamptz System.Data.DbType.DateTime DateTime NpgsqlTypes.NpgsqlDbType.TimestampTZ
timestamp with time zone System.Data.DbType.DateTime DateTime NpgsqlTypes.NpgsqlDbType.TimestampTz
timetz System.Data.DbType.Time DateTime NpgsqlTypes.NpgsqlDbType.Time
unknown System.Data.DbType.String String NpgsqlTypes.NpgsqlDbType.Text
uuid System.Data.DbType.Guid Guid NpgsqlTypes.NpgsqlDbType.Uuid
varchar System.Data.DbType.String String NpgsqlTypes.NpgsqlDbType.Varchar
_varchar System.Data.DbType.String[] String[] NpgsqlDbType.Array | NpgsqlDbType.Varchar
xid System.Data.DbType.UInt32 uint NpgsqlTypes.NpgsqlDbType.Xid
xml System.Data.DbType.Xml Xml.XmlDocument NpgsqlTypes.NpgsqlDbType.Xml
这绝不是全面的,但是当我们发现以前没有见过的 dbtype 时,我们只需将其添加到映射中。
“数据类型”列是从NpgsqlDataReader.GetDataTypeName(i)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.