将Npgsql文本类型转换为C#类型

时间:2016-12-01 00:30:51

标签: c# postgresql

我需要找到将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”,但在我看来,这是解决它的最糟糕的方法:(

也许有人知道我该怎么办? :)

1 个答案:

答案 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)得到的。