文档首页
MySQL Connector/NET 开发人员指南
相关文档 下载此手册
PDF (US Ltr) - 1.3Mb
PDF (A4) - 1.3Mb


MySQL Connector/NET 开发人员指南  /  Connector/NET 教程  /  教程:使用 Connector/NET 进行基本 CRUD 操作

6.6 教程:使用 Connector/NET 进行基本 CRUD 操作

本教程提供了使用 MySQL 作为文档存储与 MySQL Connector/NET 入门的说明。

有关概念和更多用法示例,请参阅 X DevAPI 用户指南.

最低要求

  • 启用了 X 协议的 MySQL 服务器 8.0.11

  • Connector/NET 8.0.11

  • Visual Studio 2013/2015/2017

  • world_x 数据库示例

导入文档存储示例

MySQL 脚本附带数据和 JSON 集合。该示例包含以下内容

  • 集合

    • countryinfo:有关世界各国的信息。

    • country:有关世界各国的基本信息。

    • city:有关这些国家中某些城市的信息。

    • countrylanguage:在每个国家使用的语言。

要安装 world_x 数据库示例,请按照以下步骤操作

  1. https://dev.mysqlserver.cn/doc/index-other.html 下载 world_x.zip

  2. 将安装存档解压缩到临时位置,例如 /tmp/

    解压缩存档将生成两个文件,其中一个名为 world_x.sql

  3. 使用以下命令通过 MySQL 客户端连接到 MySQL 服务器

    $> mysql -u root -p

    出现提示时输入您的密码。只要帐户具有创建新数据库的权限,就可以使用非 root 帐户。有关使用 MySQL 客户端的更多信息,请参阅 mysql — MySQL 命令行客户端.

  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();

    }
  }
}