login register Sysop! about ME  

2018년 04월 02일 09시 40분 00초,     조회수 : 516
  제목 : asp 2개의 프로시저 insert 시 오류
SEQ : 163995 글쓴이 : kccabin

작성 포맷 : TEXT 모드, 자동 줄바꿈 사용

아래의 소스처럼 2개의 프로시저를 사용하여 데이터를 insert 하려고 합니다.
첫번째 프로시저 inset 하고 고유값을 리턴 받아서 두번째 프로시저에 첫번째 고유값을 포함한 데이터를 insert 하려고 합니
다.
2개의 테이블에 데이터는 들어가는데
두번째 .Execute , , adExecuteNoRecords에서 timeout 걸립니다.
lock이 걸리네요 ㅠㅠ
timeout 오류가 발생 후 insert 했던 데이터가 rollback 됩니다.
무엇때문인지 알수가 없네요

mssql insert 쿼리문을 만들어서 테스트 하면 테스트 하면 제대로 등록이 된다.

Set cmd = Server.CreateObject("ADODB.Command")
With cmd
.ActiveConnection = ConnStr
.ActiveConnection.BeginTrans
.Commandtext = "usp_CoordinatorPlanInsert"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@cd_idx", adInteger,  adParamInput, 10)
.Parameters.Append .CreateParameter("@cd_year", adVarChar, adParamInput, 4)
.Parameters.Append .CreateParameter("@cd_order", adUnsignedTinyInt,  adParamInput, 10)
.Parameters.Append .CreateParameter("@cd_name", adVarChar,  adParamInput, 20)
.Parameters.Append .CreateParameter("@cd_cname", adVarChar,  adParamInput, 200)
.Parameters.Append .CreateParameter("@cd_dp_code", adVarChar,  adParamInput, 6)
.Parameters.Append .CreateParameter("@cd_gubun", adChar, adParamInput, 1)
.Parameters.Append .CreateParameter("@mb_reg_id", adVarChar, adParamInput, 50)
.Parameters.Append .CreateParameter("@intResult", adInteger, adParamOutPut,0)
.Parameters.Append .CreateParameter("@intIdx", adInteger, adParamOutPut,0)
.Parameters("@cd_idx") = 0
.Parameters("@cd_year") = cd_year
.Parameters("@cd_order") = cd_order
.Parameters("@cd_name") = cd_name
.Parameters("@cd_cname") = cd_cname
.Parameters("@cd_dp_code") = cd_dp_code
.Parameters("@cd_gubun") = mode
.Parameters("@mb_reg_id") = mb_sess_id

'저장 프로시저 실행
.Execute , , adExecuteNoRecords
intResult = .Parameters("@intResult")
intIdx    = .Parameters("@intIdx")
End With

If intResult = 1 Then
For i=1 To Request.Form("cdpl_date").count

If TRIM(Request.Form("cdpl_date")(i) & "") <> "" And  TRIM(Request.Form("cdpl_cname")(i) & "") <> "" And  
TRIM(Request.Form("cdpl_purpose")(i) & "") <> "" Then
Set cmd2 = Server.CreateObject("ADODB.Command")
With cmd2
.ActiveConnection = ConnStr
.ActiveConnection.BeginTrans
.Commandtext = "usp_CoordinatorPlanDetailInsert"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@cdpl_idx", adInteger, adParamInput, 10)
.Parameters.Append .CreateParameter("@cdpl_cd_idx", adInteger, adParamInput, 10)
.Parameters.Append .CreateParameter("@cdpl_date", adDBTimeStamp, adParamInput, 10)
.Parameters.Append .CreateParameter("@cdpl_cname", adVarChar, adParamInput, 100)
.Parameters.Append .CreateParameter("@cdpl_cnumber", adVarChar, adParamInput, 20)
.Parameters.Append .CreateParameter("@cdpl_clocation", adVarChar, adParamInput, 200)
.Parameters.Append .CreateParameter("@cdpl_purpose", adVarChar, adParamInput, 6)
.Parameters.Append .CreateParameter("@cdpl_purpose_note", adVarChar, adParamInput, 200)
.Parameters.Append .CreateParameter("@cdpl_note", adVarChar, adParamInput, 200)
.Parameters.Append .CreateParameter("@mb_reg_id", adVarChar, adParamInput, 50)
.Parameters.Append .CreateParameter("@intResult", adInteger, adParamOutPut, 0)
.Parameters("@cdpl_idx") = 0
.Parameters("@cdpl_cd_idx") = intIdx
.Parameters("@cdpl_date") = StripHTML(TRIM(Request.Form("cdpl_date")(i)& ""))
.Parameters("@cdpl_cname") = StripHTML(TRIM(Request.Form("cdpl_cname")(i)& ""))
.Parameters("@cdpl_cnumber") = StripHTML(TRIM(Request.Form("cdpl_cnumber")(i)& ""))
.Parameters("@cdpl_clocation") = StripHTML(TRIM(Request.Form("cdpl_clocation")(i)& ""))
.Parameters("@cdpl_purpose") = TRIM(Request.Form("cdpl_purpose")(i)& "")
.Parameters("@cdpl_purpose_note")= StripHTML(TRIM(Request.Form("cdpl_purpose_note")(i)& ""))
.Parameters("@cdpl_note") = StripHTML(TRIM(Request.Form("cdpl_note")(i)& ""))
.Parameters("@mb_reg_id") = mb_sess_id

'프로시저 실행
.Execute , , adExecuteNoRecords
intResult = .Parameters("@intResult")
End With

''Set cmd = Nothing
If intResult <> 1 Then Exit For

End if

Next

End If

cmd.ActiveConnection.CommitTrans 
cmd2.ActiveConnection.CommitTrans 

Call closeDB()

  kchlja
  2018-04-11(02:30)
캐릭 이미지
commit 을 분리해보세요....
일단 락이 걸리는 원인은 하나의 커넥션에 begintran이 각각 열리고 하나의 트렌젝션
이 끝나기도전에 (commit없이) 새로운 트렌젝션이 시작되기 때문입니다.

DB트렌젝션의 원리가 중요하고 시작점과 종단점을 구분하는 것을 연습해보세요!



제목 작성자 날짜 조회
asp 2개의 프로시저 insert 시 오류 (1) kccabin 2018-04-02 516

 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})