Guest User

Untitled

a guest
Nov 19th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. Public Class BidDAO
  2. ' 入札処理
  3. Public Shared Function ExecBid(itemid As Integer, userid As Integer, price As Integer) As BidErrorEnum
  4.  
  5. Using con As New OracleConnection(ConfigurationManager.ConnectionStrings("OracleDB").ConnectionString)
  6. ' ロック、最高値取得用Command
  7. Dim cmd4lock As New OracleCommand(
  8. "SELECT * FROM 異常系1_応札データ WHERE 商品id=:ID for update", con)
  9. cmd4lock.Parameters.Add(New OracleParameter("ID", OracleDbType.Int64))
  10. ' 最高値取得
  11. Dim cmd4max As New OracleCommand(
  12. "SELECT MAX(応札金額) as 応札最高値 FROM 異常系1_応札データ WHERE 商品id=:ID", con)
  13. cmd4max.Parameters.Add(New OracleParameter("ID", OracleDbType.Int64))
  14. ' 入札データ書き込み用Command
  15. Dim cmd4insert As New OracleCommand("INSERT INTO 異常系1_応札データ(商品ID, ユーザーID, 応札金額) VALUES(:itemid, :userid, :price)", con)
  16. cmd4insert.Parameters.Add(New OracleParameter("itemid", OracleDbType.Int64))
  17. cmd4insert.Parameters.Add(New OracleParameter("userid", OracleDbType.Int64))
  18. cmd4insert.Parameters.Add(New OracleParameter("price", OracleDbType.Int64))
  19.  
  20. con.Open()
  21.  
  22. ' トランザクションオブジェクト取得
  23. Using tx As OracleTransaction = con.BeginTransaction
  24. cmd4lock.Transaction = tx
  25. cmd4insert.Transaction = tx
  26.  
  27. Try
  28. ' ロック
  29. cmd4lock.Parameters("id").Value = itemid
  30. cmd4lock.ExecuteScalar()
  31.  
  32. ' 最高値取得
  33. Dim maxPrice As Integer = 0
  34.  
  35. Try
  36. cmd4max.Parameters("id").Value = itemid
  37. maxPrice = cmd4max.ExecuteScalar
  38. Catch ex As InvalidCastException
  39. maxPrice = 0
  40. End Try
  41.  
  42. If maxPrice >= price Then
  43. ' 入札金額が最高値以下
  44. tx.Rollback()
  45.  
  46. Return BidErrorEnum.UnderPriceError
  47. End If
  48.  
  49. ' 入札データ書き込み
  50. cmd4insert.Parameters("itemid").Value = itemid
  51. cmd4insert.Parameters("userid").Value = userid
  52. cmd4insert.Parameters("price").Value = price
  53. cmd4insert.ExecuteNonQuery()
  54.  
  55. tx.Commit()
  56. Catch ex As OracleException
  57. ' DBアクセス時にエラー
  58. tx.Rollback()
  59. ' なにもできないので、再スロー
  60. Throw ex
  61. 'Catch ex As Exception
  62. ' ' 入札金額が応札最高値以下
  63. ' tx.Rollback()
  64.  
  65. ' Return BidErrorEnum.UnderPriceError
  66. End Try
  67. End Using
  68.  
  69. End Using
  70.  
  71. Return BidErrorEnum.Success
  72. End Function
  73. End Class
Add Comment
Please, Sign In to add comment