Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Class BidDAO
- ' 入札処理
- Public Shared Function ExecBid(itemid As Integer, userid As Integer, price As Integer) As BidErrorEnum
- Using con As New OracleConnection(ConfigurationManager.ConnectionStrings("OracleDB").ConnectionString)
- ' ロック、最高値取得用Command
- Dim cmd4lock As New OracleCommand(
- "SELECT * FROM 異常系1_応札データ WHERE 商品id=:ID for update", con)
- cmd4lock.Parameters.Add(New OracleParameter("ID", OracleDbType.Int64))
- ' 最高値取得
- Dim cmd4max As New OracleCommand(
- "SELECT MAX(応札金額) as 応札最高値 FROM 異常系1_応札データ WHERE 商品id=:ID", con)
- cmd4max.Parameters.Add(New OracleParameter("ID", OracleDbType.Int64))
- ' 入札データ書き込み用Command
- Dim cmd4insert As New OracleCommand("INSERT INTO 異常系1_応札データ(商品ID, ユーザーID, 応札金額) VALUES(:itemid, :userid, :price)", con)
- cmd4insert.Parameters.Add(New OracleParameter("itemid", OracleDbType.Int64))
- cmd4insert.Parameters.Add(New OracleParameter("userid", OracleDbType.Int64))
- cmd4insert.Parameters.Add(New OracleParameter("price", OracleDbType.Int64))
- con.Open()
- ' トランザクションオブジェクト取得
- Using tx As OracleTransaction = con.BeginTransaction
- cmd4lock.Transaction = tx
- cmd4insert.Transaction = tx
- Try
- ' ロック
- cmd4lock.Parameters("id").Value = itemid
- cmd4lock.ExecuteScalar()
- ' 最高値取得
- Dim maxPrice As Integer = 0
- Try
- cmd4max.Parameters("id").Value = itemid
- maxPrice = cmd4max.ExecuteScalar
- Catch ex As InvalidCastException
- maxPrice = 0
- End Try
- If maxPrice >= price Then
- ' 入札金額が最高値以下
- tx.Rollback()
- Return BidErrorEnum.UnderPriceError
- End If
- ' 入札データ書き込み
- cmd4insert.Parameters("itemid").Value = itemid
- cmd4insert.Parameters("userid").Value = userid
- cmd4insert.Parameters("price").Value = price
- cmd4insert.ExecuteNonQuery()
- tx.Commit()
- Catch ex As OracleException
- ' DBアクセス時にエラー
- tx.Rollback()
- ' なにもできないので、再スロー
- Throw ex
- 'Catch ex As Exception
- ' ' 入札金額が応札最高値以下
- ' tx.Rollback()
- ' Return BidErrorEnum.UnderPriceError
- End Try
- End Using
- End Using
- Return BidErrorEnum.Success
- End Function
- End Class
Add Comment
Please, Sign In to add comment