文件首頁
MySQL Connector/NET 開發人員指南
相關文件 下載本手冊
PDF (美國信紙) - 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://mysqldev.dev.org.tw/doc/index-other.html 下載 world_x.zip

  2. 將安裝封存解壓縮到暫存位置,例如 /tmp/

    解壓縮封存會產生兩個檔案,其中一個名為 world_x.sql

  3. 使用 MySQL 用戶端以以下命令連線至 MySQL 伺服器

    $> mysql -u root -p

    出現提示時輸入您的密碼。只要帳戶具有建立新資料庫的權限,就可以使用非根帳戶。如需關於使用 MySQL 用戶端的詳細資訊,請參閱 mysql — MySQL 命令列用戶端

  4. 執行 world_x.sql 指令碼以建立資料庫結構,並如下所示插入資料

    mysql> SOURCE /temp/world_x.sql;

    /temp/ 取代為您系統上 world_x.sql 檔案的路徑。

新增必要 DLL 的參考

建立以 .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"]);
  }
}

刪除特定文件

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

    }
  }
}