안녕하세요.
ADODB.RecordSet이 아닌 ADODB.Command를 사용하여
TEXT형 컬럼을 포함한 테이블에 파라메터를 바인딩하여
INSERT하는 방법입니다. 테이블의 SELECT가 일어나지
않기 때문에 ADODB.RecordSet을 사용하는 것보다 빠를
것이라고 예상됩니다...^^;
참고로 여러번의 실행이 될 경우 PREPARE가 가능합니다.
ADODB.Command의 Property중에 PREPARE에 관한 Property가
존재합니다. 같은 문장을 여러번 실행할 경우 속도의 향상을
꾀할 수 있을 것입니다.
물론 UPDATE,DELETE에도 응용할 수 있겠죠.
변수를 바인딩하여 사용하기 때문에 전체 SQL문의 길이에
영향을 미치지 않기 때문에 내용이 많아도 오류가 발생하지
않습니다. 단지 ASP의 변수의 할당량(TEXTAREA에 입력할 경우
100KB 던가요)에 영향을 받습니다.
그럼 많이 사용하세요...
<%
const adCmdText = 1
const adCmdTable = 2
const adCmdStoredProc = 4
const adCmdUnknown = 8
const adCmdFile = 256 ' &H100
const adCmdTableDirect = 512 ' &H200
const adParamUnknown = 0
const adParamInput = 1
const adParamOutput = 2
const adParamInputOutput = 3
const adParamReturnValue = 4
const adLongVarchar = 201 ' &HC9
const adExecuteNoRecords = 128 ' &H80
Dim AComm, sContent
Set AComm = Server.CreateObject("ADODB.Command")
' 기존의 Connection 객체가 있을 경우 대입하고 없을 경우 접속 문자열을 입력
AComm.ActiveConnection = "Test"
AComm.CommandType = adCmdText
AComm.CommandText = "insert into test values (0, 'test', ?);"
AComm.Parameters.Append AComm.CreateParameter("content", adLongVarchar, adParamInput, Len(Request("content")), Request("content"))
AComm.Execute
' 실행시 반환되는 Recordset이 없을 경우
'AComm.Execute , , adExecuteNoRecords
' ADODB.Connection을 사용시에도 adCmdText(1)와 adExecuteNoRecords를 명시적으로
' 제시하는 것이 속도가 빠르다.
' ex) AC.Execute SQL, ret, adCmdText + adExecuteNoRecords
Set AComm = Nothing
%>
|