本教學課程提供您開始使用 MySQL 作為搭配 MySQL Connector/NET 的文件儲存區的說明。
如需概念和額外的使用範例,請參閱 X DevAPI 使用者指南。
MySQL 指令碼隨附資料和 JSON 集合。此範例包含下列項目
集合
countryinfo:關於世界各國的資訊。
表格
country:關於世界各國的最小資訊。
city:關於這些國家/地區部分城市的資訊。
countrylanguage:每個國家/地區使用的語言。
若要安裝 world_x
資料庫範例,請依照下列步驟執行
從 https://mysqldev.dev.org.tw/doc/index-other.html 下載
world_x.zip
。將安裝封存解壓縮到暫存位置,例如
/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.6.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();
}
}
}