プログラム 技術

C#・SQLコマンドのTransaction(トランザクション)の扱いについて

以前、SQLコマンドを使用してSQLの総裁について書きましたが、その際にトランザクションについては書いておらず、どのように使用するのか気になって調べたのでまとめました

名称バージョン
C# .Net8.0
Microsoft.Data.SqlClient5.2.2
以前の記事
SQLServerにC#でアクセスする(SqlCommand版) - ナストンのまとめ
SQLServerにC#でアクセスする(SqlCommand版) - ナストンのまとめ

これまでSQLサーバーにC#でアクセスしたことがなく、そのやり方を勉強した際に使用したものです。今回はSQLComman ...

対象記事へ

まず初めに

今回は.Net Frameworkではなく.NetなのでSQLコマンドを使用する際には「System.Data.SqlClient」が使用できないので「Microsoft.Data.SqlClient」を使用しています。使い方は変わらないのでnamespaceだけが変わっている感じとなります

トランザクションを実装する

トランザクションはSQLコマンド(InsertやUpdate等のデータ変更コマンド)を実行する前に実施前の状態を保持し、コマンドを実行して問題なければ更新状態を保存。エラーが発生したら実行前の状態に戻すといった感じなります。
それをコードにすると以下のようになります

using(SqlCommand comm = sqlConnection.CreateCommand())
{
    //トランザクションの開始
    comm.Transaction = sqlConnection.BeginTransaction();

    //クエリ
    string query = $"INSERT INTO {tableName} (name, age) VALUES (@Name, @Age)";
    comm.CommandText = query;
    comm.CommandType = CommandType.Text;
    comm.Parameters.Add("@Name", SqlDbType.NVarChar).Value = name;
    comm.Parameters.Add("@Age", SqlDbType.Int).Value = age;
    try
    {
        comm.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        //ロールバック
        comm.Transaction.Rollback();
        Console.WriteLine(ex.Message);
        return;
    }

    //Parameterのクリア
    comm.Parameters.Clear();

    //変更を確定する
    comm.Transaction.Commit();
}

データベースにアクセスする際にエラーが発生した

SQLサーバーへアクセスする際にエラーが発生し、アクセスが出来なかったのですが調べたらサーバー証明書の検証エラーだったため、検証を実施しないようにプロパティを設定する必要がありました

var sqlBuilder = new SqlConnectionStringBuilder()
{
    DataSource = "localhost or IPアドレス",
    InitialCatalog = "対象データベース",
    UserID = "ログインユーザー",
    Password = "UserIDのパスワード",
    TrustServerCertificate = true, // 証明書の検証を行わない
    Encrypt = true, // 暗号化を有効にする
};
sqlConnection = new SqlConnection(sqlBuilder.ConnectionString);
sqlConnection.Open();
参考サイト
System.Data.SqlClient から Microsoft.Data.SqlClient に移行すると「信頼されていない機関によって証明書チェーンが発行されました。」エラーが発生する - C#プログラミング | iPentec
System.Data.SqlClient から Microsoft.Data.SqlClient に移行すると「信頼されていない機関によって証明書チェーンが発行されました。」エラーが発生する - C#プログラミング | iPentec

System.Data.SqlClient から Microsoft.Data.SqlClient に移行すると「信頼さ ...

参考サイトへ

最後に

今回はトランザクションについて記載してみましたが、実際に使ってみるとそんなに難しくなかったです。また、今回のサンプルコードをGitHubにアップしていますので参考にしてみてください

サンプルコード
BlogSampleCodeProjects/SQLCommandTransaction at main · nasuton/BlogSampleCodeProjects · GitHub
BlogSampleCodeProjects/SQLCommandTransaction at main · nasuton/BlogSampleCodeProjects · GitHub

Project for sample code used in the blog.(Blogで記載しているサンプルコード ...

GitHubへ

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

PR

-プログラム, 技術
-,