Приложение на C#
На этой странице подробно разбирается код тестового приложения, использующего C# SDK YDB.
Инициализация соединения с базой данных
Для взаимодействия с YDB создается экземпляр драйвера, клиента и сессии:
- Драйвер YDB отвечает за взаимодействие приложения и YDB на транспортном уровне. Драйвер должен существовать на всем протяжении жизненного цикла работы с YDB и должен быть инициализирован перед созданием клиента и сессии.
- Клиент YDB работает поверх драйвера YDB и отвечает за работу с сущностями и транзакциями.
- Сессия YDB содержит информацию о выполняемых транзакциях и подготовленных запросах и содержится в контексте клиента YDB.
Фрагмент кода приложения для подключения к базе данных:
using Ydb.Sdk.Ado;
await using var dataSource = new YdbDataSource("Host=localhost;Port=2136;Database=/local");
await using var connection = await dataSource.OpenConnectionAsync();
Создание строковых таблиц
Выполняется создание строковых таблиц, которые используются в дальнейших операциях тестового приложения. В результате исполнения шага в базе данных будут созданы строковые таблицы модели данных справочника сериалов:
series- Сериалыseasons- Сезоныepisodes- Эпизоды
После создания вызывается метод получения информации об объекте схемы данных, и выводится результат его выполнения.
Для создания таблиц используется YdbCommand с DDL (Data Definition Language) YQL-запросом:
await using var command = new YdbCommand(connection)
{
CommandText = @"
CREATE TABLE series (
series_id Uint64 NOT NULL,
title Utf8,
series_info Utf8,
release_date Date,
PRIMARY KEY (series_id)
);
CREATE TABLE seasons (
series_id Uint64,
season_id Uint64,
title Utf8,
first_aired Date,
last_aired Date,
PRIMARY KEY (series_id, season_id)
);
CREATE TABLE episodes (
series_id Uint64,
season_id Uint64,
episode_id Uint64,
title Utf8,
air_date Date,
PRIMARY KEY (series_id, season_id, episode_id)
);"
};
await command.ExecuteNonQueryAsync();
Запись данных
Выполняется запись данных в созданные строковые таблицы с использованием команды UPSERT языка запросов YQL. Применяется режим передачи запроса на изменение данных с автоматическим подтверждением транзакции в одном запросе к серверу.
Фрагмент кода, демонстрирующий выполнение запроса на запись/изменение данных:
await using var command = new YdbCommand(@"
UPSERT INTO series (series_id, title, release_date) VALUES
($id, $title, $release_date);
", connection);
command.Parameters.Add(new YdbParameter("$id", YdbDbType.Uint64, 1UL));
command.Parameters.Add(new YdbParameter("$title", YdbDbType.Text, "NewTitle"));
command.Parameters.Add(new YdbParameter("$release_date", YdbDbType.Date, DateTime.UtcNow));
await command.ExecuteNonQueryAsync();
Получение выборки данных
Выполняется запрос на получение выборки данных с использованием команды SELECT языка запросов YQL. Демонстрируется обработка полученной выборки в приложении.
Для выполнения YQL-запросов с чтением данных используется метод ExecuteReaderAsync. Параметры запроса передаются через коллекцию Parameters объекта YdbCommand:
await using var command = new YdbCommand(@"
SELECT
series_id,
title,
release_date
FROM series
WHERE series_id = $id;
", connection);
command.Parameters.Add(new YdbParameter("$id", YdbDbType.Uint64, id));
await using var reader = await command.ExecuteReaderAsync();
Обработка результатов выполнения
Результат выполнения запроса обрабатывается через DbDataReader. Пример обработки результата:
while (await reader.ReadAsync())
{
Console.WriteLine($"> Series, " +
$"series_id: {reader.GetUint64(0)}, " +
$"title: {reader.GetString(1)}, " +
$"release_date: {reader.GetDateTime(2)}");
}
Для последовательного чтения строк из другого запроса:
await using var command = new YdbCommand(
"SELECT title FROM seasons ORDER BY series_id, season_id;", connection);
await using var reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
Console.WriteLine(reader.GetString(0));
}