ADO.NET Supported Types and Their Mappings
The following lists the built-in mappings for reading and writing CLR types to YDB types.
Type Mapping Table for Reading
The following shows the mappings used when reading values.
- These are the return types when using
YdbCommand.ExecuteScalarAsync(),YdbDataReader.GetValue(), and similar methods. - You can read as other types by calling
YdbDataReader.GetFieldValue<T>()and alsoYdbDataReader.GetInt32()/YdbDataReader.GetInt64()to get the raw value.
| YDB тип | .NET тип | Non-default .NET типы |
|---|---|---|
| Bool | bool | |
| Int8 | sbyte | |
| Int16 | short | |
| Int32 | int | |
| Int64 | long | |
| Uint8 | byte | |
| Uint16 | ushort | |
| Uint32 | uint | |
| Uint64 | ulong | |
| Float | float | |
| Double | double | |
| Decimal (precision, scale) | decimal (cм. раздел Decimal) | |
Bytes (синоним String) |
byte[] | |
Text (синоним Utf8) |
string | |
| Json | string | |
| JsonDocument | string | |
| Yson | byte[] | |
| Uuid | Guid | |
| Date | DateTime | DateOnly |
| Date32 | DateTime | DateOnly, int (GetInt32() — raw value) |
| Datetime | DateTime | DateOnly |
| Datetime64 | DateTime | DateOnly, long (GetInt64() — raw value) |
| Timestamp | DateTime | DateOnly |
| Timestamp64 | DateTime | DateOnly, long (GetInt64() — raw value) |
| Interval | TimeSpan | long (GetInt64() — raw value) |
| Interval64 | TimeSpan | long (GetInt64() — raw value) |
Decimal
Decimal (Precision, Scale) is a parameterized data type in YDB that allows you to explicitly specify:
Precision— the total number of significant digits;Scale— the number of digits after the decimal point.
For more details, see the documentation.
By default, the Decimal(22, 9) type is used. If you need to set different values for Precision and Scale, you can do this in your code.
The example below demonstrates how to store the value 1.5 in the database with the Decimal type and parameters Precision = 5 and 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();
Type Mapping Table for Writing
There are three rules that determine the YDB type sent for a parameter:
- If the parameter's
YdbDbTypeis set, it is used. - If the parameter's
DbTypeis set, it is used. - If none of the above is set, the backend type will be inferred from the CLR value type.
| YDB type | .NET type | Non-default .NET types | YdbDbType | DbType |
|---|---|---|---|---|
| Bool | bool | Bool | Boolean | |
| Int8 | sbyte | Int8 | SByte | |
| Int16 | short | sbyte, byte | Int16 | Int16 |
| Int32 | int | sbyte, byte, short, ushort | Int32 | Int32 |
| Int64 | long | sbyte, byte, short, ushort, int, uint | Int64 | Int64 |
| Uint8 | byte | Uint8 | Byte | |
| Uint16 | ushort | byte | Uint16 | UInt16 |
| Uint32 | uint | byte, ushort | Uint32 | UInt32 |
| Uint64 | ulong | byte, ushort, uint | Uint64 | UInt64 |
| Float | float | Float | Single | |
| Double | double | float | Double | Double |
| Decimal (precision, scale) | decimal | Decimal | Decimal, Currency | |
Bytes (synonym of String) |
byte[] | Bytes | Binary | |
Text (synonym of Utf8) |
string | Text | String, AnsiString, AnsiStringFixedLength, StringFixedLength | |
| Json | string | Json | ||
| JsonDocument | string | JsonDocument | ||
| Yson | byte[] | Yson | ||
| Uuid | Guid | Uuid | Guid | |
| Date | DateOnly | DateTime | Date | Date |
| Date32 | DateTime, DateOnly, int (raw value) | Date32 | ||
| Datetime | DateTime, DateOnly | Datetime | Datetime | |
| Datetime64 | DateTime, long (raw value) | Datetime64 | ||
| Timestamp | DateTime | Timestamp | DateTime2 | |
| Timestamp64 | DateTime, long (raw value) | Timestamp64 | ||
| Interval | TimeSpan | long (raw value) | Interval | |
| Interval64 | TimeSpan, long (raw value) | Interval64 | ||
| List | T[], List |
T[], List |
List | YdbDbType |
Note
When using List, specify the type as a bitwise OR of YdbDbType.List and the element type. For example, to specify the YdbDbType for ListYdbDbType.List | YdbDbType.Int32.