本教程提供的说明可帮助您开始使用 MySQL 作为 MySQL Connector/NET 的文档存储。有关概念和其他用法示例,请参阅X DevAPI 用户指南。
MySQL 脚本随数据和 JSON 集合一起提供。该示例包含以下内容:
收藏
countryinfo:关于世界各国的信息。
表
country:关于世界各国的最少信息。
city:关于这些国家的一些城市的信息。
countrylanguage:每个国家使用的语言。
要安装world_x
数据库示例,请执行以下步骤:
world_x.zip
从 http://dev.mysql.com/doc/index-other.html 下载。将安装存档提取到一个临时位置,例如
/tmp/
.解压归档文件会产生两个文件,其中一个名为
world_x.sql
.通过以下命令使用 MySQL 客户端连接到 MySQL 服务器:
$> mysql -u root -p
出现提示时输入密码。只要帐户具有创建新数据库的权限,就可以使用非根帐户。有关使用 MySQL 客户端的更多信息,请参阅mysql — MySQL 命令行客户端。
执行
world_x.sql
脚本创建数据库结构并插入数据如下:mysql> SOURCE /temp/world_x.sql;
替换为系统上文件
/temp/
的路径 。world_x.sql
创建一个面向 .NET Framework 4.5.2(或更高版本)、.NET Core 1.1 或 .NET Core 2.0 的新 Visual Studio 控制台项目。本教程中的代码示例以 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"]);
}
}
以下示例显示了您可以对集合执行的基本操作。
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();
}
}
}