Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

ASP에서 SQL문을 실행할 때 옵션 설정

ASP에서 Insert, Update, Delete등 반환값이 없는 SQL문을 실행할 때 보통

con.Execute sql

위와같이 사용한다. sql에 실행할 SQL문을 스트링으로 저장하고 커넥션을 이용해서 실행한다. 하지만 이 뒤에 옵션을 붙힐 수 있는데 옵션을 붙힐 경우 성능을 향상 시킬 수 있다.

con.Execute sql, , adCmdText + adExecuteNoRecords

예를 들어 위와같이 사용하면 실행 성능을 더 향상 시킬 수 있다. 뒤에 붙는 인자는 CommandTypeEnum과 ExecuteOptionEnum에 대한 값이다.

CommandTypeEnum은 sql문의 타입을 명시적으로 밝혀 주는 것이다.

adCmdUnspecified : 명령 타입을 지정하지 않는다.(사용X)
adCmdText : SQL쿼리 등 텍스트 문자열
adCmdTable : 테이블 이름
adCmdStoredProc : 스토어드 프로시저
adCmdUnknown : (기본값) CommanText를 알수 없는 값으로 지정(부하 많음)
adCmdFile : 저장된 레코드셋의 파일 이름
adCmdTable Direct : 테이블 이름


ExecuteOptionEnum : 명령의 실행 방식이다.

adAsyncExecute : 비동기식으로 실행
adAsyncFetch : 앞의 행을 가져온 이후에 비동기식으로 실행
adAsyncFetchNonBlocking : adAsyncFetch와 비슷하지만 레코드들을 가져오는 작업으로 인해 명령이 방해되지 않음
adExecuteNoRecords : 레코드를 리턴하지 않는다.
adOptionUnspecified : 명령이 명시되지 않음


그래서

con.Execute sql, , adCmdText + adExecuteNoRecords

위의 문은 sql문이 텍스트 문자열이고 레코드를 반환하지 않는 다는 것을 명시하고 있으며 이렇게 사용함으로써 퍼포먼스를 늘릴 수 있다.

추가적으로 위의 명령을 보면 콤마(,)가 2개 사용된것을 볼 수 있는데 LngRecs라는 명령어가 사용되지 않아서 그렇다.

con.Execute sql, LngRecs, adCmdText

이 명령어를 사용하면 LngRecs라는 변수에 쿼리문으로 실행된 갯수가 넘어온다. Update문으로 5개행이 변환되었다면(쿼리분석기에서 "5개분 실행됨"처럼...) LngRecs에 5라는 숫자가 들어오게 된다
2007/11/11 21:33 2007/11/11 21:33

파이어폭스에서 button태그에 onclick이 안먹히는 문제

크로스브라우징에 대한 부분이다. 지금 멀 만들고 있는데 당장 급한 분위기는 아니고 혼자만들고 있고 해서 개인적인 욕심으로 XHTML을 지키고 브라우저 호환성을 좀 유지하면서 만들고 싶었다. 그래서 기본적인 기능 구현하면서 파이어폭스(Firefox)에서 테스트를 돌렸는데 특정버튼들이 먹히지 않는 문제점을 발견했다.


<script type="text/javascript">
    function testMethod()
    {
        document.location.href="file.asp";
    }
</script>

<button onclick="testMethod();">눌러</button>

(평소처럼 복사해 온게 아니라 틀리지 않았나 몰라.. ㅡ..ㅡ)

어쨌든 로직은 필요없으니 보자면 저런 구조다. 버튼을 클릭하면 자바스크립트 메서드가 호출되는 상황.

IE에서는 아무런 문제가 없었다. 그런데 파이어폭스에서는 아무런 동작도 되지 않았다. 계속적인 테스트.....

일단 펑션자체는 잘 먹었다. <a>로 태스트했더니 location.href는 잘 동작했는데 <button>에서만 동작을 안해서 처음에는 onclick가 안되는 줄 알았는데 또 다른 <button>에서 onclick으로 호출된 펑션이 폼.submit의 형태를 띄고 있는 건 또 잘 작동이 됐다.

location.href가 안되는거냐... onclick이 안되는거냐... 엄청 고민했다.. 찾고 또 찾고....

역시 구글링... 구글링으로 찾은 외국사이트가 날 살렸다. 해결법과 이유까지 확실히....

파폭에서 <button>은 기본적으로 submit의 형태로 동작을 한다. 그래서 submit이 있는 경우는 제대로 동작하지만 submit이 없으니 동작이 무시되어 버린 것이다.

해결책은 return false;가 있으면 된다. 펑션안에 있어도 되고.... 호출할 때 onclick="testMethod();return false;"와 같이 써주거나 onclick="return testMethod();"로 써주면 정상적으로 작동한다.


덧) 이거 하는데 2시간도 더 걸렸다.. ㅡ..ㅡ 근데 평소 올블에서의 분위기로 느껴지던 웹표준과 크로스브라우징.... 막상 자료를 찾으니까 자료가 거의 없다.. ㅠ..ㅠ 아직 내가 체감하는것 만큼의 중요한 이슈가 아닌건가? ㅡ..ㅡ
2007/11/09 00:29 2007/11/09 00:29