繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM