Поддерживаемые типы данных в интеграции с ADO.NET и их соответствие

Ниже перечислены встроенные сопоставления при чтении и записи типов CLR в типы YDB.

Таблица сопоставления типов на чтение

Ниже показаны сопоставления, используемые при чтении значений.

Возвращаемый тип при использовании YdbCommand.ExecuteScalarAsync(), YdbDataReader.GetValue() и подобных методов.

YDB тип .NET тип
Bool bool
Text (синоним Utf8) string
Bytes (синоним String) byte[]
Uint8 byte
Uint16 ushort
Uint32 uint
Uint64 ulong
Int8 sbyte
Int16 short
Int32 int
Int64 long
Float float
Double double
Date DateTime
Datetime DateTime
Timestamp DateTime
Decimal cм. раздел Decimal
Json string
JsonDocument string
Yson byte[]

Decimal

Decimal (Precision, Scale) — это параметрический тип данных в YDB, который позволяет явно указать:

  • Precision — общее количество значащих цифр;
  • Scale — количество цифр после запятой.

Подробнее — в документации

По умолчанию используется тип Decimal(22, 9). Если нужно задать другие значения Precision и Scale, это можно сделать с помощью кода.

Пример ниже показывает, как записать в базу данных значение 1.5 с типом Decimal и параметрами Precision = 5 и Scale = 3.

await new YdbCommand(ydbConnection)
{
    CommandText = $"INSERT INTO {tableName}(Id, Decimal) VALUES (1, @Decimal);",
    Parameters = new YdbParameter { Name = "Decimal", Value = 1.5m, Precision = 5, Scale = 3 }
}.ExecuteNonQueryAsync();

Таблица сопоставления типов на запись

YDB тип DbType .NET тип
Bool Boolean bool
Text (синоним Utf8) String, AnsiString, AnsiStringFixedLength, StringFixedLength string
Bytes (синоним String) Binary byte[]
Uint8 Byte byte
Uint16 UInt16 ushort
Uint32 UInt32 uint
Uint64 UInt64 ulong
Int8 SByte sbyte
Int16 Int16 short
Int32 Int32 int
Int64 Int64 long
Float Single float
Double Double double
Date Date DateTime
Datetime DateTime DateTime
Timestamp DateTime2 (для .NET типа DateTime), DateTimeOffset (для .NET типа DateTimeOffset) DateTime, DateTimeOffset
Decimal Decimal, Currency decimal

Примечание

Важно понимать, что если DbType не указан, параметр будет вычислен из System.Type.

Также вы можете указывать любой YDB тип, используя конструкторы из Ydb.Sdk.Value.YdbValue. Например:

var parameter = new YdbParameter("$parameter", YdbValue.MakeJsonDocument("{\"type\": \"jsondoc\"}"));