本記事では、SqlSugarフレームワーク、OceanBase Connector/ODBC、およびOceanBaseデータベースを使用して、テーブルの作成、データの挿入、データのクエリなどの基本的な操作を実現するアプリケーションの構築方法を紹介します。
前提条件
OceanBaseデータベースをインストール済みで、Oracleモードのユーザーテナントを作成していること。OceanBaseデータベースのインストールに関する詳細は、デプロイの概要を参照してください。
Visual StudioおよびNuGetパッケージマネージャープラグインと.NET Frameworkコンポーネントをインストール済みであること。
OceanBase Connector/ODBCドライバーをインストール済みであること。
説明
OceanBase公式サイトのリソース > ダウンロードセンター > エンタープライズ版ページのドライバーとミドルウェアモジュールから、OceanBase ODBCドライバーWindows版のインストールパッケージをダウンロードしてください。Windows版OceanBase Connector/ODBCドライバーのインストールパッケージはワンクリックでデプロイできる形式であり、デフォルトの手順に従ってインストールすれば完了します。
手順
説明
本記事で示す操作手順は、Windows環境でVisual Studio Community 2019を使用してこのプロジェクトをコンパイルおよび実行する場合のものです。他のOS環境やコンパイラを使用する場合は、操作手順が若干異なる可能性があります。
sqlsugar-oceanbase-odbcプロジェクトを開きます。- SqlSugar関連のパッケージをインストールします。
- データソースを設定します。
sqlsugar-oceanbase-odbcプロジェクト内のデータソースを修正します。- プロジェクトをビルドします。
- アプリケーションを実行します。
- 出力結果を確認します。
ステップ1:sqlsugar-oceanbase-odbcプロジェクトを開く
Visual Studio Community 2019を起動します。
既存のプロジェクトを開きます。
Visual Studio Community 2019の開始画面で、使用を開始する前に プロジェクトまたはソリューションを開く(P) ボタンをクリックします。または、Visual Studio Community 2019の開始画面で、使用を開始する前に コードなしで続行(W) ボタンをクリックするか、上部のメニューバーから ファイル -> 開く -> プロジェクト/ソリューション(P) を選択します。
sqlsugar-oceanbase-odbc プロジェクト フォルダに移動し、プロジェクトファイル(
sqlsugar-oceanbase-odbc.slnまたはsqlsugar-oceanbase-odbc.csproj)を選択して 開く をクリックします。
ステップ2:SqlSugar関連のパッケージをインストールする
Visual Studio Community 2019の開始画面で、上部のメニューバーから ツール -> NuGetパッケージマネージャー -> ソリューションのNuGetパッケージの管理 を選択します。
参照 の検索ボックスに
sqlsugarと入力して、SqlSugarパッケージをダウンロードします。参照 の検索ボックスに
sqlsugar.odbcと入力して、SqlSugar.OdbcおよびSqlSugar.OdbcCoreパッケージをダウンロードします。インストールが完了したら、プロジェクトのコードファイルでSqlSugarの関連名前空間と型を使用できます。
ステップ3:データソースの設定
データベースの接続情報を取得します。
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。
例:
obclient -hxxx.xxx.xxx.xxx -P2881 -usys@oracle001 -p******パラメータ説明:
-h:OceanBaseデータベースへの接続IPアドレスを指定します。ODP接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。-P:OceanBaseデータベースの接続ポートを指定します。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。-u:テナントの接続アカウントを指定します。ODP接続の一般的な形式はユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名です。直接接続方式の形式はユーザー名@テナント名です。-p:アカウントのパスワードを指定します。
接続文字列の詳細については、OBClientを使用してOceanBaseテナントに接続するを参照してください。
OceanBase Connector/ODBCドライバが正常にインストールされているか確認します。
コントロールパネル > システムとセキュリティ > 管理ツール > ODBCデータソース(64ビット) > ドライバー を選択します。OceanBase Connector/ODBCドライバが正常にインストールされている場合、ここに表示されます。
新しいデータソースを作成します。
ユーザーDSN > 追加 > ドライバーの選択 を選択し、完了 をクリックします。
ポップアップウィンドウでデータソース名 Name と説明 Description を入力し、次へ をクリックします。
ポップアップウィンドウでデータベース接続情報を入力し、次へ をクリックすると、初期化ステートメント、TLS、カーソル、結果セットなどの情報を設定できます。
説明
データベース接続情報の入力後、Test DSN をクリックして、データソースが正常に接続できるか確認できます。
設定完了後、終了 をクリックします。データソースが正常に追加されたら、OK をクリックします。
ステップ4:sqlsugar-oceanbase-odbcプロジェクトのデータソースを修正する
ステップ3:データソースの設定で作成したデータソースに基づいて、Program.cs ファイル内のデータソースを修正します。
例:
your_dsn を ステップ3:データソースの設定で作成したデータソース test_oboracle に置き換えます。
public static string ConnectionString = "DSN=test_oboracle";
ステップ5:プロジェクトをビルドする
ビルド メニューを選択し、ソリューションのビルド を選択します。ビルド中、コンパイラの出力およびエラーや警告情報が表示されます。
ステップ6:アプリケーションを実行する
デバッグ メニューを選択し、デバッグの開始 または 実行の開始(デバッグなし) を選択してアプリケーションを実行します。
ステップ7:出力結果を確認する
出力結果はデバッグコンソールに表示されます。プログラムの設計ロジックとコードに基づいて、出力の処理方法を判断できます。
プロジェクトコードについて
sqlsugar-oceanbase-odbc をクリックしてプロジェクトコードをダウンロードします。これは、sqlsugar-oceanbase-odbc.zip という名前の圧縮ファイルです。
解凍すると、sqlsugar-oceanbase-odbc という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:
sqlsugar-oceanbase-odbc
├─ Program.cs
├─ sqlsugar-oceanbase-odbc.csproj
└─ sqlsugar-oceanbase-odbc.sln
ファイルの説明:
Program.cs:プロジェクトのメインプログラムファイルで、プロジェクトのエントリポイント、データテーブルの構造定義、データテーブル操作を実装したソースコードファイルが含まれます。sqlsugar-oceanbase-odbc.csproj:Visual Studioのプロジェクトのメインプロジェクトファイルで、プロジェクトの設定、依存関係、ビルド情報を定義するために使用されます。sqlsugar-oceanbase-odbc.sln:Visual Studioのソリューションファイルで、プロジェクトおよび関連プロジェクトの情報が含まれ、複数のプロジェクトの統合管理とビルドに使用されます。
Program.csファイルのコード紹介
Program.cs のコードは、SqlSugarを使用してOceanBaseデータベースを操作する方法を示しており、テーブルの作成、データの挿入、データのクエリなどの基本操作を実装しています。同時に、AopEvents オブジェクトを使用してログ記録などのイベントコールバック関数を設定し、デバッグとトラブルシューティングを容易にします。
本記事の Program.cs ファイルのコードは、主に以下の部分で構成されています:
名前空間の参照。
usingキーワードを使用して、System、SqlSugar、System.Linq、System.Data、System.Data.Odbcの各名前空間を参照します。これにより、関連するデータアクセスクラスやデータベース操作のクラス・メソッドを利用できます。コード:
using System; using SqlSugar; using System.Linq; using System.Data; using System.Data.Odbc;名前空間の定義。関連するクラスとメソッドを配置するために使用します。
GbaseTestという名前の名前空間を定義し、その中にProgramとTestEntityの2つのクラスを定義します。コード:
namespace GbaseTest { internal class Program { ... ... } public class TestEntity { ... ... } }Programという名前のクラスを定義します。プログラムの主要なロジックが含まれます。
Program という名前のクラスを定義し、プログラムの主要なロジックを含みます。具体的な手順は以下の通りです:
データベース接続文字列を格納するための、パブリックな静的文字列型の変数
ConnectionStringを定義します。この変数は現在のアセンブリ内のどこからでもアクセスできます。ここで、DSN=your_dsnはODBC接続方式を使用し、your_dsnという名前のデータソースを使用することを意味します。注意
プログラムを実行する際は、
your_dsnを ステップ3 で作成したデータソース名に置き換えてください。Mainメソッド:プログラムのエントリポイントであり、プログラムの主要なロジックが含まれます。
try-catchブロック:tryキーワードで、例外が発生する可能性のあるコード、usingステートメント、データベース操作を囲みます。catchキーワードで例外をキャッチし、処理を行います。最後に、プログラム終了前に
Program End.を出力します。
コード:
internal class Program
{
public static string ConnectionString = "DSN=your_dsn";
static void Main(string[] args)
{
try
{
using (...)
{
//データベース操作
}
}
catch (Exception ex)
{
...
...
}
Console.WriteLine("Program End.");
}
}
usingステートメント。ConnectionConfigを使用してデータベース接続情報やその他のオプションを設定します。データベースタイプはODBC、接続文字列はConnectionString、主キータイプはAttribute、接続の自動クローズ、ログ実行イベントのコールバック関数の設定などです。SqlSugarClientオブジェクトを使用することで、テーブルの作成、データの挿入、データのクエリなど、データベース操作を簡単に実行できます。usingステートメントを使用することで、データベース接続のクローズを含む関連リソースを自動的に解放できます。具体的な手順は以下の通りです:SqlSugarClientオブジェクトを作成し、dbという名前の変数に代入します。接続設定のインスタンスを作成し、オブジェクト初期化子を使用して
DbType、ConnectionString、InitKeyType、IsAutoCloseConnection、AopEventsなどのプロパティを初期化します。データベースタイプをODBCに設定します。
接続文字列を
ConnectionStringに設定します。主キータイプを
Attributeに設定します。接続の自動クローズを設定します。
AopEventsのログ実行イベントコールバック関数を設定します。ログ実行イベントコールバック関数の実装ロジックを設定します。ここで、sqlは実行されるSQLステートメントを表し、pはSQLステートメント内のパラメータリストを表します。実装ロジックでは、SQLステートメントとパラメータリストをコンソールに出力します。
コード:
using (SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = SqlSugar.DbType.Odbc, ConnectionString = ConnectionString, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true, AopEvents = new AopEvents { OnLogExecuting = (sql, p) => { Console.WriteLine(sql); Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value))); } } }))データベース操作。
SqlSugarClient.Ado.ExecuteCommandメソッドを使用してSQLステートメントを実行し、テーブルの作成とデータの挿入を行います。SqlSugarClient.Ado.SqlQueryメソッドを使用してデータをクエリし、クエリ結果を反復処理して出力します。SqlSugarClientオブジェクトを使用することで、テーブルの作成、データの挿入、データのクエリなど、データベース操作を簡単に実行できます。具体的な手順は以下の通りです:テーブル作成開始を示すメッセージを出力します。
SQLステートメントを実行して、
test_tbl1という名前のテーブルを作成します。このテーブルにはidとnameの2つの列が含まれます。データ挿入開始を示すメッセージを出力します。
変数
tableNameを定義し、test_tbl1を代入します。この変数はテーブル名を格納するために使用されます。SQLステートメントを実行して、
test_tbl1という名前のテーブルにデータを挿入します。挿入するレコードは3件で、それぞれidが1、2、3、nameがJohn、Jack、Amyです。データクエリ開始を示すメッセージを出力します。
SQLステートメントを実行して、
test_tbl1という名前のテーブルの全データをクエリし、クエリ結果を変数dataに代入します。TestEntityはクエリ結果のエンティティタイプです。クエリ結果の反復処理開始を示すメッセージを出力します。
クエリ結果を反復処理し、各行を変数
itemに代入します。各行のidとnameフィールドを出力します。
コード:
{ Console.WriteLine("Create Table:"); db.Ado.ExecuteCommand("CREATE TABLE test_tbl1(id NUMBER PRIMARY KEY, name VARCHAR2(50))"); Console.WriteLine("Insert Data:"); string tableName = "test_tbl1"; int intValue = db.Ado.ExecuteCommand($"INSERT INTO {tableName} (id, name) VALUES (1, 'John'), (2, 'Jack'), (3, 'Amy')"); Console.WriteLine("Query Data"); var data = db.Ado.SqlQuery<TestEntity>($"SELECT * FROM {tableName}"); Console.WriteLine("Query Results:"); foreach (var item in data) { Console.WriteLine($"id: {item.id}, name: {item.name}"); } }catchキーワードを使用して例外をキャッチし、処理を行います。プログラムで例外が発生すると、例外に関する情報が出力されます。例外をキャッチして情報を出力することで、デバッグや問題の特定が容易になり、プログラムの堅牢性と信頼性が確保されます。具体的な手順は以下の通りです:
catchキーワードを使用して例外をキャッチし、キャッチした例外オブジェクトを変数exに代入します。この例外オブジェクトはException型またはそのサブクラスのインスタンスです。プログラムで例外が発生したことを示すメッセージを出力します。
キャッチした例外オブジェクトを文字列に変換して出力します。この文字列には、例外のタイプ、メッセージ、スタックトレースなどの情報が含まれます。
コード:
catch (Exception ex) { Console.WriteLine("Program Exception:"); Console.WriteLine(ex.ToString()); }TestEntityクラスを定義します。TestEntityという名前のクラスを定義します。このクラスにはidとnameの2つのプロパティがあり、それぞれエンティティオブジェクトのidフィールドとnameフィールドを表します。具体的な手順は以下の通りです:TestEntityという名前のパブリッククラスを定義します。エンティティオブジェクトの
idフィールドを表すパブリックな整数型プロパティidを定義します。プロパティのgetおよびsetメソッドを使用して、このフィールドの読み取りと設定を行えます。エンティティオブジェクトの
nameフィールドを表すパブリックな文字列型プロパティnameを定義します。プロパティのgetおよびsetメソッドを使用して、このフィールドの読み取りと設定を行えます。
コード:
public class TestEntity { public int id { get; set; } public string name { get; set; } }
全コード表示
using System;
using SqlSugar;
using System.Linq;
using System.Data;
using System.Data.Odbc;
namespace GbaseTest
{
internal class Program
{
public static string ConnectionString = "DSN=your_dsn";
static void Main(string[] args)
{
try
{
using (SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.Odbc,
ConnectionString = ConnectionString,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true,
AopEvents = new AopEvents
{
OnLogExecuting = (sql, p) =>
{
Console.WriteLine(sql);
Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
}
}
}))
{
Console.WriteLine("Create Table:");
db.Ado.ExecuteCommand("CREATE TABLE test_tbl1(id NUMBER PRIMARY KEY, name VARCHAR2(50))");
Console.WriteLine("Insert Data:");
string tableName = "test_tbl1";
int intValue = db.Ado.ExecuteCommand($"INSERT INTO {tableName} (id, name) VALUES (1, 'John'), (2, 'Jack'), (3, 'Amy')");
Console.WriteLine("Query Data");
var data = db.Ado.SqlQuery<TestEntity>($"SELECT * FROM {tableName}");
Console.WriteLine("Query Results:");
foreach (var item in data)
{
Console.WriteLine($"id: {item.id}, name: {item.name}");
}
}
}
catch (Exception ex)
{
Console.WriteLine("Program Exception:");
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Program End.");
}
}
public class TestEntity
{
public int id { get; set; }
public string name { get; set; }
}
}
関連ドキュメント
OceanBaseデータベースへの接続方法の詳細については、接続方法の概要を参照してください。
OceanBase Connector/ODBCの詳細については、OceanBase Connector/ODBCを参照してください。
sqlsugar-oceanbase-odbc サンプルプロジェクトをダウンロード