Spec-Zone.ru › MySQL Connectors 1.0

6.6 Учебное пособие: Базовые операции CRUD с Connector/NET

В данном учебном пособии приводятся инструкции для начала работы с MySQL в качестве хранилища документов с помощью MySQL Connector/NET.

  • Минимальные требования

  • Импорт образца хранилища документов

  • Добавление ссылок на необходимые DLL

  • Импорт пространств имен

  • Создание сессии

  • Поиск строки в коллекции

  • Вставка нового документа в коллекцию

  • Обновление существующего документа

  • Удаление конкретного документа

  • Закрытие сессии

  • Полный пример кода

Для получения информации о концепциях и дополнительных примерах использования см. Руководство пользователя X DevAPI.

Минимальные требования

  • MySQL Server 8.0.11 с включенным протоколом X

  • Connector/NET 8.0.11

  • Visual Studio 2013/2015/2017

  • world_x образец базы данных

Импорт образца хранилища документов

Вместе с данными и JSON-коллекцией предоставляется скрипт MySQL. Образец содержит следующее:

  • Коллекция

    • countryinfo: Информация о странах мира.

  • Таблицы

    • country: Минимальная информация о странах мира.

    • city: Информация о некоторых городах этих стран.

    • countrylanguage: Языки, на которых говорят в каждой стране.

Чтобы установить world_x образец базы данных, выполните следующие действия:

  1. Загрузите world_x.zip с http://dev.mysql.com/doc/index-other.html.

  2. Извлеките архив установки в временную папку, например, /tmp/.

    Распаковка архива приводит к двум файлам, один из которых называется world_x.sql.

  3. Подключитесь к серверу MySQL с помощью MySQL Client, используя следующую команду:

    $> mysql -u root -p
    

    Введите свой пароль, когда будет запрошено. Может быть использован не-root аккаунт, если у него есть права на создание новых баз данных. Для получения дополнительной информации об использовании MySQL Client, обратитесь к ...

  4. Выполните скрипт world_x.sql для создания структуры базы данных и вставки данных следующим образом:

    mysql> SOURCE /temp/world_x.sql;
    

    Замените /temp/ путем к файлу world_x.sql на вашем компьютере.

Добавление ссылок на необходимые DLL

Создайте новый проект консоли Visual Studio, нацеленный на .NET Framework 4.6.2 (или более позднюю версию), .NET Core 1.1 или .NET Core 2.0. Примеры кода в данном учебнике представлены на языке C#, но вы можете использовать любой .NET язык.

Добавьте ссылку в свой проект на следующие DLL:

  • MySql.Data.dll

  • Google.Protobuf.dll

Импорт пространств имен

Импортируйте необходимые пространства имен, добавив следующие инструкции:

using MySqlX.XDevAPI;
using MySqlX.XDevAPI.Common;
using MySqlX.XDevAPI.CRUD;

Создание сессии

Сессия в X DevAPI — это высокоуровневое понятие сессии базы данных, отличное от работы с традиционными низкоуровневыми подключениями MySQL. Важно понимать, что эта сессия не такая, как традиционная сессия MySQL. Сессии объединяют одно или несколько фактических подключений MySQL.

Следующий пример открывает сессию, которую вы можете использовать для получения схемы и выполнения основных операций CRUD.

string schemaName = "world_x";
// Define the connection string
string connectionURI = "mysqlx://test:test@localhost:33060";
Session session = MySQLX.GetSession(connectionURI);
// Get the schema object
Schema schema = session.GetSchema(schemaName);

Поиск строки в коллекции

После создания сессии вы можете выполнить операцию поиска. Следующий пример использует созданный объект сессии:

// Use the collection 'countryinfo'
var myCollection = schema.GetCollection("countryinfo");
var docParams = new DbDoc(new { name1 = "Albania", _id1 = "ALB" });

// Find a document
DocResult foundDocs = myCollection.Find("Name = :name1 || _id = :_id1").Bind(docParams).Execute();

while (foundDocs.Next())
{
	Console.WriteLine(foundDocs.Current["Name"]);
	Console.WriteLine(foundDocs.Current["_id"]);
}

Вставка нового документа в коллекцию

//Insert a new document with an identifier
var obj = new { _id = "UKN", Name = "Unknown" };
Result r = myCollection.Add(obj).Execute();

Обновление существующего документа

// using the same docParams object previously created
docParams = new DbDoc(new { name1 = "Unknown", _id1 = "UKN" });
r = myCollection.Modify("_id = :Id").Bind("id", "UKN").Set("GNP", "3308").Execute();
if (r.AffectedItemsCount == 1)
{
  foundDocs = myCollection.Find("Name = :name1|| _id = :_id1").Bind(docParams).Execute();
  while (foundDocs.Next())
  {
     Console.WriteLine(foundDocs.Current["Name"]);
     Console.WriteLine(foundDocs.Current["_id"]);
     Console.WriteLine(foundDocs.Current["GNP"]);
  }
}

Удаление конкретного документа

r = myCollection.Remove("_id = :id").Bind("id", "UKN").Execute();

Закрытие сессии

session.Close();

Полный пример кода

Следующий пример демонстрирует базовые операции, которые можно выполнить с коллекцией.

using MySqlX.XDevAPI;
using MySqlX.XDevAPI.Common;
using MySqlX.XDevAPI.CRUD;
using System;

namespace MySQLX_Tutorial
{
  class Program
  {
    static void Main(string[] args)
    {

      string schemaName = "world_x";
      string connectionURI = "mysqlx://test:test@localhost:33060";
      Session session = MySQLX.GetSession(connectionURI);
      Schema schema = session.GetSchema(schemaName);

      // Use the collection 'countryinfo'
      var myCollection = schema.GetCollection("countryinfo");
      var docParams = new DbDoc(new { name1 = "Albania", _id1 = "ALB" });

      // Find a document
      DocResult foundDocs = myCollection.Find("Name = :name1 || _id = :_id1").Bind(docParams).Execute();

      while (foundDocs.Next())
      {
        Console.WriteLine(foundDocs.Current["Name"]);
        Console.WriteLine(foundDocs.Current["_id"]);
      }

      //Insert a new document with an id
      var obj = new { _id = "UKN", Name = "Unknown" };
      Result r = myCollection.Add(obj).Execute();

      //update an existing document
      docParams = new DbDoc(new { name1 = "Unknown", _id1 = "UKN" });
      r = myCollection.Modify("_id = :Id").Bind("id", "UKN").Set("GNP", "3308").Execute();
      if (r.AffectedItemsCount == 1)
      {
        foundDocs = myCollection.Find("Name = :name1|| _id = :_id1").Bind(docParams).Execute();
        while (foundDocs.Next())
        {
          Console.WriteLine(foundDocs.Current["Name"]);
          Console.WriteLine(foundDocs.Current["_id"]);
          Console.WriteLine(foundDocs.Current["GNP"]);
        }
      }

      // delete a row in a document
      r = myCollection.Remove("_id = :id").Bind("id", "UKN").Execute();

      //close the session
      session.Close();

      Console.ReadKey();

    }
  }
}

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-tutorials-document-store.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API