快速入门:使用 .NET (C#) 连接到 Azure Database for MySQL 灵活服务器并查询其中的数据
本快速入门演示如何使用 C# 应用程序连接到 Azure Database for MySQL 灵活服务器实例。 同时还介绍了如何使用 SQL 语句在数据库中查询、插入、更新和删除数据。
先决条件
对于本快速入门,你需要:
- 具有活动订阅的 Azure 帐户。
如果没有 Azure 订阅,可在开始前创建一个 Azure 试用帐户。
- 使用以下项创建 Azure Database for MySQL 灵活服务器实例(如果还没有):快速入门:使用 Azure 门户创建 Azure Database for MySQL 的实例
或快速入门:使用 Azure CLI 创建 Azure Database for MySQL 灵活服务器的实例。 - 请完成以下操作之一以启用连接,具体取决于你使用的是公共访问还是私有访问。
- 创建数据库和非管理员用户
- 安装适用于平台(Windows、Ubuntu Linux 或 macOS)的 .NET SDK。
创建一个 C# 项目
在命令提示符处运行以下命令:
mkdir AzureMySqlExample
cd AzureMySqlExample
dotnet new console
dotnet add package MySqlConnector
获取连接信息
获取连接到 Azure Database for MySQL 灵活服务器实例所需的连接信息。 需要完全限定的服务器名称和登录凭据。
- 登录到 Azure 门户。
- 在 Azure 门户的左侧菜单中,选择“所有资源”,然后搜索已创建的服务器(例如 mydemoserver)。
- 选择服务器名称。
- 从服务器的“概览”面板中记下“服务器名称”和“服务器管理员登录名”。 如果忘记了密码,也可通过此面板来重置密码。
步骤 1:连接并插入数据
通过以下代码来连接和加载数据,只需使用 CREATE TABLE
和 INSERT INTO
SQL 语句即可。 代码使用 MySqlConnection
类的以下方法:
- OpenAsync(),用于与 MySQL 建立连接。
- CreateCommand(),用于设置 CommandText 属性
- ExecuteNonQueryAsync(),用于运行数据库命令。
将 Server
、Database
、UserID
、Password
参数替换为你在创建服务器和数据库时指定的值。
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.chinacloudapi.cn",
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 分析记录中的值。
将 Server
、Database
、UserID
、Password
参数替换为你在创建服务器和数据库时指定的值。
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.chinacloudapi.cn",
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
类与以下方法配合使用:
- OpenAsync(),用于与 MySQL 建立连接。
- CreateCommand(),用于设置 CommandText 属性
- ExecuteNonQueryAsync(),用于运行数据库命令。
将 Server
、Database
、UserID
、Password
参数替换为你在创建服务器和数据库时指定的值。
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.chinacloudapi.cn",
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
类与以下方法配合使用
- OpenAsync(),用于与 MySQL 建立连接。
- CreateCommand(),用于设置 CommandText 属性。
- ExecuteNonQueryAsync(),用于运行数据库命令。
将 Server
、Database
、UserID
、Password
参数替换为你在创建服务器和数据库时指定的值。
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.chinacloudapi.cn",
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