クイックスタート: .NET (C#) を使用して Azure Database for MySQL - フレキシブル サーバーに接続してデータを照会する

適用対象: Azure Database for MySQL - フレキシブル サーバー

このクイックスタートでは、C# アプリケーションを使用して Azure Database for MySQL フレキシブル サーバー インスタンスに接続する方法を紹介します。 ここでは、SQL ステートメントを使用してデータベース内のデータを照会、挿入、更新、削除する方法を説明します。

前提条件

このクイックスタートでは、以下が必要です。

  • アクティブなサブスクリプションが含まれる Azure アカウント。

    Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。 現在、Azure 無料アカウントがあれば、Azure Database for MySQL - フレキシブル サーバーを 12 か月間無料でお試しいただけます。 詳細については、「Azure Database for MySQL - フレキシブル サーバーの無料トライアル」を参照してください。

  • Azure portal を使用して Azure Database for MySQL フレキシブル サーバー インスタンスを作成します
    Azure CLI を使用して、Azure Database for PostgreSQL の単一サーバーを作成します (まだない場合)。

  • パブリック アクセスとプライベート アクセスのどちらを使用しているかに基づいて、次のいずれかのアクションを実行して、接続を有効にします。

  • データベースと管理者以外のユーザーを作成する

  • 使用しているプラットフォーム (Windows、Ubuntu Linux、または macOS) 用の .NET SDK をインストールします。

問題がある場合は、 お知らせください

C# プロジェクトの作成

コマンド プロンプトで、次のコマンドを実行します。

mkdir AzureMySqlExample
cd AzureMySqlExample
dotnet new console
dotnet add package MySqlConnector

接続情報の取得

Azure Database for MySQL フレキシブル サーバー インスタンスに接続するために必要な接続情報を取得します。 完全修飾サーバー名とログイン資格情報が必要です。

  1. Azure Portal にログインします。
  2. Azure portal の左側のメニューにある [すべてのリソース] を選択し、作成したサーバー (例: mydemoserver) を検索します。
  3. サーバー名を選択します。
  4. サーバーの [概要] パネルから、 [サーバー名][サーバー管理者ログイン名] を書き留めます。 パスワードを忘れた場合も、このパネルからパスワードをリセットすることができます。 Azure Database for MySQL flexible server instance name

手順 1: データの接続と挿入

接続を確立し、SQL ステートメントの CREATE TABLEINSERT INTO を使ってデータを読み込むには、次のコードを使います。 コードは、MySqlConnection クラスの以下のメソッドを使用します。

ServerDatabaseUserIDPassword の各パラメーターの値は、サーバーとデータベースを作成するときに指定した値に置き換えてください。

using System;
using System.Threading.Tasks;
using MySqlConnector;

namespace AzureMySqlExample
{
    class MySqlCreate
    {
        static async Task Main(string[] args)
        {
            var builder = new MySqlConnectionStringBuilder
            {
                Server = "YOUR-SERVER.mysql.database.azure.com",
                Database = "YOUR-DATABASE",
                UserID = "USER",
                Password = "PASSWORD",
                SslMode = MySqlSslMode.Required,
            };

            using (var conn = new MySqlConnection(builder.ConnectionString))
            {
                Console.WriteLine("Opening connection");
                await conn.OpenAsync();

                using (var command = conn.CreateCommand())
                {
                    command.CommandText = "DROP TABLE IF EXISTS inventory;";
                    await command.ExecuteNonQueryAsync();
                    Console.WriteLine("Finished dropping table (if existed)");

                    command.CommandText = "CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);";
                    await command.ExecuteNonQueryAsync();
                    Console.WriteLine("Finished creating table");

                    command.CommandText = @"INSERT INTO inventory (name, quantity) VALUES (@name1, @quantity1),
                        (@name2, @quantity2), (@name3, @quantity3);";
                    command.Parameters.AddWithValue("@name1", "banana");
                    command.Parameters.AddWithValue("@quantity1", 150);
                    command.Parameters.AddWithValue("@name2", "orange");
                    command.Parameters.AddWithValue("@quantity2", 154);
                    command.Parameters.AddWithValue("@name3", "apple");
                    command.Parameters.AddWithValue("@quantity3", 100);

                    int rowCount = await command.ExecuteNonQueryAsync();
                    Console.WriteLine(String.Format("Number of rows inserted={0}", rowCount));
                }

                // connection will be closed by the 'using' block
                Console.WriteLine("Closing connection");
            }

            Console.WriteLine("Press RETURN to exit");
            Console.ReadLine();
        }
    }
}

問題がある場合は、 ぜひご意見をお寄せください。

手順 2:データの読み取り

接続を確立し、SELECT SQL ステートメントを使用してデータを読み取るには、次のコードを使用します。 コードは、MySqlConnection クラスと以下のメソッドを使用します。

  • OpenAsync() は、MySQL への接続を確立します。
  • CreateCommand() は、CommandText プロパティを設定します。
  • ExecuteReaderAsync() は、データベース コマンドを実行します。
  • ReadAsync() は、結果のレコードに進みます。 GetInt32 と GetString を使用して、レコード内の値を解析します。

ServerDatabaseUserIDPassword の各パラメーターの値は、サーバーとデータベースを作成するときに指定した値に置き換えてください。

using System;
using System.Threading.Tasks;
using MySqlConnector;

namespace AzureMySqlExample
{
    class MySqlRead
    {
        static async Task Main(string[] args)
        {
            var builder = new MySqlConnectionStringBuilder
            {
                Server = "YOUR-SERVER.mysql.database.azure.com",
                Database = "YOUR-DATABASE",
                UserID = "USER@YOUR-SERVER",
                Password = "PASSWORD",
                SslMode = MySqlSslMode.Required,
            };

            using (var conn = new MySqlConnection(builder.ConnectionString))
            {
                Console.WriteLine("Opening connection");
                await conn.OpenAsync();

                using (var command = conn.CreateCommand())
                {
                    command.CommandText = "SELECT * FROM inventory;";

                    using (var reader = await command.ExecuteReaderAsync())
                    {
                        while (await reader.ReadAsync())
                        {
                            Console.WriteLine(string.Format(
                                "Reading from table=({0}, {1}, {2})",
                                reader.GetInt32(0),
                                reader.GetString(1),
                                reader.GetInt32(2)));
                        }
                    }
                }

                Console.WriteLine("Closing connection");
            }

            Console.WriteLine("Press RETURN to exit");
            Console.ReadLine();
        }
    }
}

問題がある場合は、 お知らせください

手順 3:データの更新

接続を確立し、UPDATE SQL ステートメントを使用してデータを読み取るには、次のコードを使用します。 コードは、MySqlConnection クラスと以下のメソッドを使用します。

ServerDatabaseUserIDPassword の各パラメーターの値は、サーバーとデータベースを作成するときに指定した値に置き換えてください。

using System;
using System.Threading.Tasks;
using MySqlConnector;

namespace AzureMySqlExample
{
    class MySqlUpdate
    {
        static async Task Main(string[] args)
        {
            var builder = new MySqlConnectionStringBuilder
            {
                Server = "YOUR-SERVER.mysql.database.azure.com",
                Database = "YOUR-DATABASE",
                UserID = "USER",
                Password = "PASSWORD",
                SslMode = MySqlSslMode.Required,
            };

            using (var conn = new MySqlConnection(builder.ConnectionString))
            {
                Console.WriteLine("Opening connection");
                await conn.OpenAsync();

                using (var command = conn.CreateCommand())
                {
                    command.CommandText = "UPDATE inventory SET quantity = @quantity WHERE name = @name;";
                    command.Parameters.AddWithValue("@quantity", 200);
                    command.Parameters.AddWithValue("@name", "banana");

                    int rowCount = await command.ExecuteNonQueryAsync();
                    Console.WriteLine(String.Format("Number of rows updated={0}", rowCount));
                }

                Console.WriteLine("Closing connection");
            }

            Console.WriteLine("Press RETURN to exit");
            Console.ReadLine();
        }
    }
}

手順 4:データの削除

接続を確立し、DELETE SQL ステートメントを使用してデータを削除するには、次のコードを使用します。

コードは、MySqlConnection クラスと以下のメソッドを使用します

ServerDatabaseUserIDPassword の各パラメーターの値は、サーバーとデータベースを作成するときに指定した値に置き換えてください。

using System;
using System.Threading.Tasks;
using MySqlConnector;

namespace AzureMySqlExample
{
    class MySqlDelete
    {
        static async Task Main(string[] args)
        {
            var builder = new MySqlConnectionStringBuilder
            {
                Server = "YOUR-SERVER.mysql.database.azure.com",
                Database = "YOUR-DATABASE",
                UserID = "USER",
                Password = "PASSWORD",
                SslMode = MySqlSslMode.Required,
            };

            using (var conn = new MySqlConnection(builder.ConnectionString))
            {
                Console.WriteLine("Opening connection");
                await conn.OpenAsync();

                using (var command = conn.CreateCommand())
                {
                    command.CommandText = "DELETE FROM inventory WHERE name = @name;";
                    command.Parameters.AddWithValue("@name", "orange");

                    int rowCount = await command.ExecuteNonQueryAsync();
                    Console.WriteLine(String.Format("Number of rows deleted={0}", rowCount));
                }

                Console.WriteLine("Closing connection");
            }

            Console.WriteLine("Press RETURN to exit");
            Console.ReadLine();
        }
    }
}

リソースをクリーンアップする

このクイックスタートで使用したすべてのリソースをクリーンアップするには、次のコマンドを使用してリソース グループを削除します。

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

次のステップ