C#でTiDBに接続する
C#(「Cシャープ」と発音)は、Microsoftによって開発された.NETファミリーのプログラミング言語の一つです。他の.NET言語には、VB.NETやF#などがあります。このチュートリアルでは、C#とMySQL Connector/NETを使用して、C#アプリケーションをMySQLプロトコル経由でTiDBに接続します。これは、TiDBがMySQLと互換性ありという高度なセキュリティを備えているためです。
.NETはWindowsでよく使用されますが、macOSとLinuxでも利用できます。すべてのプラットフォームで、コマンドとコードはほぼ同じで、プロンプトとファイルパスにわずかな違いがあるだけです。
前提条件
- .NET 9.0 SDKダウンロードしてください。
- このチュートリアルでは、
dotnet
コマンドラインツールを使用します。または、Visual Studio Code IDE を使用して C# コードを操作することもできます。 - このチュートリアルを完了するには、TiDBインスタンスへのアクセスが必要です。TiDB TiDB CloudのTiDB CloudスターターまたはTiDB Cloud専用クラスター、あるいは
tiup playground
で開始したような TiDB Self-Managed クラスターを使用できます。
ステップ1. コンソールプロジェクトを設定する
console
テンプレートを使用して新しいプロジェクトを作成します。これにより、 tidb_cs
名前の新しいディレクトリが生成されます。以下のコマンドを実行する前に、このディレクトリを作成する場所に移動するか、フルパスを指定してください。
$ dotnet new console -o tidb_cs
The template "Console App" was created successfully.
Processing post-creation actions...
Restoring /home/dvaneeden/tidb_cs/tidb_cs.csproj:
Restore succeeded.
ステップ2. MySql.Dataパッケージを追加する
.NET用のパッケージマネージャーはNuGetです。MySQL Connector/NETのNuGetパッケージ名はMySql.データで、.NETアプリケーションでMySQLプロトコルをサポートします。バージョンを指定しない場合は、NuGetは最新の安定バージョン(例:バージョン9.3.0)をインストールします。
$ cd tidb_cs
$ dotnet add package MySql.Data
Build succeeded in 1.0s
info : X.509 certificate chain validation will use the system certificate bundle at '/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem'.
info : X.509 certificate chain validation will use the fallback certificate bundle at '/usr/lib64/dotnet/sdk/9.0.106/trustedroots/timestampctl.pem'.
info : Adding PackageReference for package 'MySql.Data' into project '/home/dvaneeden/tidb_cs/tidb_cs.csproj'.
info : GET https://api.nuget.org/v3/registration5-gz-semver2/mysql.data/index.json
info : OK https://api.nuget.org/v3/registration5-gz-semver2/mysql.data/index.json 133ms
info : Restoring packages for /home/dvaneeden/tidb_cs/tidb_cs.csproj...
info : GET https://api.nuget.org/v3/vulnerabilities/index.json
info : OK https://api.nuget.org/v3/vulnerabilities/index.json 98ms
info : GET https://api.nuget.org/v3-vulnerabilities/2025.06.18.05.40.02/vulnerability.base.json
info : GET https://api.nuget.org/v3-vulnerabilities/2025.06.18.05.40.02/2025.06.19.11.40.05/vulnerability.update.json
info : OK https://api.nuget.org/v3-vulnerabilities/2025.06.18.05.40.02/vulnerability.base.json 32ms
info : OK https://api.nuget.org/v3-vulnerabilities/2025.06.18.05.40.02/2025.06.19.11.40.05/vulnerability.update.json 64ms
info : Package 'MySql.Data' is compatible with all the specified frameworks in project '/home/dvaneeden/tidb_cs/tidb_cs.csproj'.
info : PackageReference for package 'MySql.Data' version '9.3.0' added to file '/home/dvaneeden/tidb_cs/tidb_cs.csproj'.
info : Generating MSBuild file /home/dvaneeden/tidb_cs/obj/tidb_cs.csproj.nuget.g.targets.
info : Writing assets file to disk. Path: /home/dvaneeden/tidb_cs/obj/project.assets.json
log : Restored /home/dvaneeden/tidb_cs/tidb_cs.csproj (in 551 ms).
ステップ3. コードを更新する
Program.cs
の「Hello World」の例を次のコードに置き換えます。
using System;
using MySql.Data.MySqlClient;
public class Tutorial1
{
public static void Main()
{
// For production, always use strong, unique passwords.
string connStr = "server=127.0.0.1;user=root;database=test;port=4000;AllowUserVariables=true";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to TiDB...\n");
conn.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Environment.Exit(1);
}
Console.WriteLine("Connected to: " + conn.ServerVersion);
MySqlCommand cmd = new MySqlCommand("SELECT TIDB_VERSION()", conn);
MySqlDataReader rdr = cmd.ExecuteReader();
rdr.Read();
Console.WriteLine("\nVersion details:\n" + rdr[0]);
rdr.Close();
conn.Close();
Console.WriteLine("Done.");
}
}
指定されたIPとポートのTiDBインスタンスに接続します。TiDB TiDB Cloudを使用する場合は、接続文字列パラメータ(ホスト名、ポート、ユーザー名、パスワードなど)をTiDB Cloudコンソールに記載されている詳細情報に置き換えてください。
コードはデータベースに接続し、そのバージョンを出力、 TIDB_VERSION()
を使用して SQL クエリを実行し、より詳細なバージョン情報を取得し、最後にこの結果を出力。
ステップ4. プログラムを実行する
$ dotnet run
Connecting to TiDB...
Connected to: 8.0.11-TiDB-v8.5.3
Version details:
Release Version: v8.5.3
Edition: Community
Git Commit Hash: f43a13324440f92209e2a9f04c0bbe9cf763978d
Git Branch: HEAD
UTC Build Time: 2025-05-29 03:30:55
GoVersion: go1.23.8
Race Enabled: false
Check Table Before Drop: false
Store: tikv
Done.