// transactionを開始して、commitして正常に終わるパターンの例 internal void UpdateCommitOK(UserEntity data) { using (var cn = DbConnectionUtil.GetConnection()) { cn.Open(); // 通常のADO.NETと同様、トランザクションを開始する var tr = cn.BeginTransaction(); try { // Execute拡張メソッドの第三引数:transactionに開始したトランザクションをセット cn.Execute(" UPDATE Users " + " SET " + " FirstName = @FirstName , " + " LastName = @LastName , " + " Email = @Email , " + " Age = @Age " + " WHERE " + " Id = @ID ", data, tr); // 通常通り、コミットすればOK tr.Commit(); } catch (Exception) { // 例外の場合等は、ロールバックする。 tr.Rollback(); } } }
internal void Create(UserEntity data) { using (var cn = DbConnectionUtil.GetConnection()) { cn.Open(); // パラメタライズドクエリでパラメータを設定する場合、その3. // バインドに使用しないメンバが存在しても問題ない // (今回の場合、data.IDは使用しない為不要だが、あってもエラーにならない cn.Execute(" INSERT INTO Users " + " (FirstName , LastName , Email , Age) " + " VALUES " + " (@FirstName , @LastName , @Email, @Age )", data); } }
internal void Update(UserEntity data) { using (var cn = DbConnectionUtil.GetConnection()) { cn.Open(); // パラメタライズドクエリでパラメータを設定する場合、その2. // 当然、匿名型ではなく名前を持った型も設定可能. // // なお、UPDATE/INSERT/DELETE等、結果列を返さないクエリの実行はExecute拡張メソッドを利用する。 cn.Execute(" UPDATE Users " + " SET " + " FirstName = @FirstName , " + " LastName = @LastName , " + " Email = @Email , " + " Age = @Age " + " WHERE " + " Id = @ID ", data); } }