• 쇼핑몰
  • 커뮤니티
  • 북마크

ASP

실시간 예약 중복 예약 방지 방법 2

익명
2023.02.27 14:36 2,702 0

본문

이 방법이 가장 효과적이고 완벽에 가까운 대안이라 생각한다.

MSSQL의 transaction 트래젝션를 ASP로 접목해 구현해 보았다.

이 방법은 MSSQL 쿼리 상태에서 부터 중복여부를 체크하는 것이 중요한 점이다.

따라서 DB상태에서 예약하고자 하는 해당 일자 동일 시간대에 예약이 존재하는지 여부와 동시에 해당 시간에 다른사람이 예약을 시도하고 있는지 여부까지 체크한다는 것이다.



<%@ Language=VBScript %>
<%
' 데이터베이스 연결 정보 설정
Dim connectionString
connectionString = "Provider=SQLNCLI11;Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD"

' 폼 데이터 추출
Dim userId, startTime, endTime
userId = Request.Form("txtUserId")
startTime = Request.Form("txtStartTime")
endTime = Request.Form("txtEndTime")

' 날짜 형식 변환
startTime = CDate(startTime)
endTime = CDate(endTime)

' 데이터베이스 연결
Dim connection
Set connection = Server.CreateObject("ADODB.Connection")
connection.Open connectionString

' 트랜잭션 시작
Dim transaction
Set transaction = connection.BeginTrans

' 해당 시간에 이미 예약이 있는지 체크
Dim checkQuery, checkCommand, checkCount
checkQuery = "SELECT COUNT(*) FROM Reservation WHERE StartTime <= ? AND EndTime >= ?"
Set checkCommand = Server.CreateObject("ADODB.Command")
checkCommand.ActiveConnection = connection
checkCommand.CommandText = checkQuery
checkCommand.Parameters.Append checkCommand.CreateParameter("@startTime", adDBTimeStamp, adParamInput, , startTime)
checkCommand.Parameters.Append checkCommand.CreateParameter("@endTime", adDBTimeStamp, adParamInput, , endTime)
Set checkCount = checkCommand.Execute
If checkCount.Fields(0).Value > 0 Then
    ' 이미 예약이 있으므로 롤백
    transaction.Rollback
    Response.Write("이미 예약이 잡혀있습니다.")
    Response.End
End If
checkCount.Close
Set checkCount = Nothing
Set checkCommand = Nothing

' 예약 정보 입력
Dim insertQuery, insertCommand
insertQuery = "INSERT INTO Reservation (UserId, StartTime, EndTime) VALUES (?, ?, ?)"
Set insertCommand = Server.CreateObject("ADODB.Command")
insertCommand.ActiveConnection = connection
insertCommand.CommandText = insertQuery
insertCommand.Parameters.Append insertCommand.CreateParameter("@userId", adInteger, adParamInput, , userId)
insertCommand.Parameters.Append insertCommand.CreateParameter("@startTime", adDBTimeStamp, adParamInput, , startTime)
insertCommand.Parameters.Append insertCommand.CreateParameter("@endTime", adDBTimeStamp, adParamInput, , endTime)
insertCommand.Execute
Set insertCommand = Nothing

' 트랜잭션 커밋
transaction.Commit

' 데이터베이스 연결 종료
connection.Close
Set connection = Nothing

Response.Write("예약이 완료되었습니다.")
%>


댓글목록 0

등록된 댓글이 없습니다.