前提・実現したいこと
C#を使用してDBの更新を行おうと思っているのですが、その際排他制御をしたく、レコードにロックをかけようと思ったのですがロックが外れてしまいます。
該当のソースコード
C#
1public Shaindata_select(string storage) 2{ 3 //接続文字列 4 string conn_str = "Server=***;Port=5432;User ID=postgres;Database=System;Password=***;Enlist=true"; 5 6 using (NpgsqlConnection conn = new NpgsqlConnection(conn_str)) 7 { 8 //PostgreSQLへ接続 9 conn.Open(); 10 11 string sql = @"BEGIN transaction; select id,name,gakureki,birthday,sex,nyushabi from syain WHERE id =" + storage + "FOR UPDATE;"; 12 13 NpgsqlCommand cmd = new NpgsqlCommand(sql, conn); 14 //クエリ実行 15 using (NpgsqlDataReader dr = cmd.ExecuteReader()) 16 { 17 //レコードなしの場合 18 if (dr.HasRows == false) { } 19 while (dr.Read()) { } 20 } 21///ここまではロックがかかっている/// 22 conn.Close(); 23///DBを閉じるとロックが解ける??/// 24 } 25}
試したこと
DBを閉じる前に検証するとロックがかかった状態になっているので、DBを閉じてしまうことによってロックが解除されてしまっているのでしょうか?初心者でわからないことばかりですみません。
補足情報(FW/ツールのバージョンなど)
Visual Studio2019
XY 問題になっていると思いますよ。Y だけでなく、X も書くことをお勧めします。
回答1件
あなたの回答
tips
プレビュー