2014. 4. 24. 11:49



[using 문 사용 예]



DB 를 사용하기 위해서  Connection 객체를 생성하고 

open() 하여 DB 데이터를 읽거나 쓰고 나서 close() 하는 게 정상 적인 방법이다.


Using 문을 사용하면  using 문 종료 후에 리소스들을 쉽게 되돌려 준다. 그러므로 db 를 close() 할 필요가 없다.


using 문 사용 예


using (SqlConnection conn= new SqlConnection("databsesName"))
{  

conn.Open();

 

return (new xxDao()).getXXX(conn, param1, param2); }


using 문 사용하지 않은 예 

try {

SqlConnection conn= new SqlConnection("databsesName"); conn.Open(); } finally { conn.Close(); }


using 문에서 여러 인스턴스를 선언 할 수 있다.


using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}


Posted by hoonihoon
2014. 2. 28. 11:42

기본 사용예제


Now()   :  2014-02-28 오전 10:53:53

Date()   :  2014-02-28

Time()   :  오후 4:48:49


FormatDateTime(Now(), 0)  :  2014-02-28 오전 10:53:53

FormatDateTime(Now(), 1)  :  2014년 2월 28월 금요일

FormatDateTime(Now(), 2)  :  2014-02-28

FormatDateTime(Now(), 3)  :  오후 4:48:49

FormatDateTime(Now(), 4)  :  16:48


** YYYY-MM-DD HH24:MI:SS (오라클 기준)
FormatDateTime(Now(), 2) ==> 2009-07-09
FormatDateTime(Now(), 4) ==> 16:48
Right(Now(), 3)                 ==> :49
====> 2009-07-09 16:48:49


Left(Date(), 4)     : 2009 (년)

Mid(Date(), 6,2)  :     07 (월)

Int(Mid(Date(), 6, 2))  :  7 (월)


실전


(1) 시간과 분을 분리 하기 

oneDateTime = FormatDateTime(Time(), 4)

SpliteTimes = Split(OneDateTime, ":")

SplitTimes(0) : 25시간중의 시간을 나타낸다.

SplitTimes(1) : 분의 값을 나타 낸다.


(2) 쇼핑몰_해당기간에 혜택주기


1) 우선 현재 시간을 구한다.

date_now = replace(date(), "-", "") & right("0"&hour(now),2)


replace(date(), "-", "")  :  20140228

right("0"&hour(now),2)  :          011


if 201402200 <= date_now and date_now <= 2014030724 then

    이벤트

end if

Posted by hoonihoon
2014. 2. 26. 10:36

DLL 이란?


DLL이란 라이브러리를 말한다. 그럼 라이브러리란 함수,데이터, 타입등의 여러가지 프로그래밍 요소들의 집합이다. 보통 LIB로 표현된다. 


자주사용되는 부분이 있다고 치자. 예를들면, 아이디 체크라든지, 이미지의 로딩이라던지, 그런 비슷한 부분을 프로그램을 한다


고 치면, 같은 부분을 여러번 소스를 작성하면 나중에 수정하기에 힘들뿐더러 당장 타이핑할때 손가락의 마비가 올수도 있다. 또한 여러번 작성함으로써 버그가 숨을 공간을 남긴다. 


이러한 부분을 따로 DLL로 만들어 놓으면, 한번 코딩으로 여러군데서 동시에 쓰일수 있다. 


또한 이렇게 만들어 놓은 좋은 DLL이 있다면, 새로운 프로그램을 빌드할때나, 실행할때 DLL의 도움을 받아 쉽게 작성할수 있으리라.

 
Unix나 Linux를 한사람들도 Dll이나, Lib 등은 알것이다. M$에서 만든것이 아니고, 여기에서 차용해 왔다고 그러더라. 

간단히 요약하자. 

* DLL은 자주사용되는 함수및 변수, 데이터의 프로그래밍 요소의 집합이다.
* 실행이나, 컴파일시 같이 빌드하면 해당 프로그램내에서 간편히 사용할수 있다.


DLL은 두가지 링크의 형태로써 프로그램과 연관을 맺는다. 

정적링크 : 


 Lib로 빌드된다. 프로그램 빌드시에 같이 빌드가 되면서 해당 프로그램의 일부가 된다. 현실적으로는 속도가 동적링


크보다는 빠르다만, 크기가 커진다. 여러 프로그램이 같은 Lib를 쓴다면, 점점더 많은 메모리가 필요하다. 절대 공유하지 않는


다. 이미 프로그램의 일부로써 다른 프로그램과는 다른 영역에 존재한다. 프로그램 빌드시에 해당 함수및 변수, 데이타들이 프


로그램에 포함되기 때문에 프로그램의 실행시 Lib의 필요가 없다. (없어도 실행가능하다) 

동적링크 :


 DLL로 빌드된다.(그렇다고, Lib가 없다는건 아니다.) 프로그램의 빌드시에는 DLL안의 함수선언만 있으면 충분하다. 현실적으


로는 속도가 정적링크보다는 느리다고 할수 있지만, 크기가 커지는 것은 아니며, 여러 프로그램이 같은 DLL을 쓴다고 하더래도 


DLL이 그 수만큼 메모리에 적재되는 것은 아니며, 공유해서 쓰게 된다. 타 프로그램도 읽을수 있는 메모리 공간에 따로 할당이 


된다. 프로그램 빌드시에는 해당 함수에 대한 선언만이 존재할뿐이어서 실제 코드가 링크된 DLL파일이 없는이상 프로그램이 실


행되지 않는다.



레지스트리란?


‘레지스트리’는 윈도우 운영체제의 실행, 또는 각종 윈도우용 응용프로그램의 실행에 필요한 설정


값들을 한데 모아 놓은 데이터베이스입니다.

 

레지스트리는 윈도우OS 만의 고유한 정보저장 체계이며, 레지스트리 내의 각 위치마다 어떤 정보가

 

어떤 형식으로 저장되어야 하는지의 규칙이 정해져 있습니다.

 

저장된 레지스트리 정보는 OS나 프로그램에 의해 읽혀지고 수정되면서 다양하게 활용됩니다. 윈도우

 

의 각 계정 별로 바탕화면을 다르게 설정하거나, MP3 확장자를 실행할 때 사용자 별로 기본 음악플

 

레이어를 다르게 정할 수 있는 것도 모두 레지스트리의 특정 위치에 이러한 규칙을 지정하는 값들이

 

존재하기 때문입니다.

 

레지스트리라는 표준화된 정보저장소가 존재함으로 인해 대부분의 윈도우용 응용프로그램들이 더 효

 

율적이고 간결한 구조를 가질 수 있습니다. 다만 레지스트리에 대한 의존도가 그 만큼 높기 때문에

 

레지스트리를 잘못 변경하거나 삭제하게 되면 필요한 정보를 얻지 못한 프로그램이 실행되지 않거나

 

비정상적으로 동작할 수 있습니다.

 

 

예를 하나 들면 어느 사용자가 A’ PC에 설치된 사진편집 프로그램의 폴더를 찾아 폴더 내용을 그대

 

로 복사해서 B’ PC로 옮긴다면, 복사된 사진편집 프로그램은 제대로 실행되지 않습니다.

 

이는 정상적인 설치과정을 거치지 않고 사진편집 프로그램 폴더의 파일만 복사를 했기 때문에 A’

 

PC에 세팅된 레지스트리 정보가 B’ PC에 정상적으로 세팅되지 못했기 때문입니다.

 

레지스트리에는 사용자 설정과 각 하드웨어, 소프트웨어의 설정 값이 저장되기도 하지만 시스템과

 

애플리케이션의 동작 기록 및 사용자의 윈도우 사용기록을 남김으로 시스템운영에 필요한 로그의 기

 

능을 하기도 합니다.

 


등록된 DLL 보기


레지스트리 편집기는 열기.  실행창에서 regedit 를 입력.


아래 레지스트리 경로에서 레지스트리에 등록된 DLL의 목록을 볼 수 있다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs



참고:

http://blog.daum.net/kiswiz/13

http://alyac.altools.co.kr/SecurityCenter/Issue/CommonSenseView.aspx?id=58

Posted by hoonihoon
2014. 2. 18. 15:57

str = "1234 5678 91021 3568"

isNa = Instr(str,"l3568")
Response.Write isNa


지정한 문자열이 있으면 몇번째에 있는지 숫자를 반환하고, 없으면 0 을 반환


Posted by hoonihoon
2014. 2. 11. 10:17


Call OpenConn_mall(conn)

Call OpenConn_ora(oraConn)


Call은 Sub, Function 을 호출 할 때 사용합니다.


w3schools 에서 의미를 찾아보면,

-> ASP 내 자바스크립트를 호출 할 수 있다.

<!DOCTYPE html>

<html>
<head>
<%
sub vbproc(num1,num2)
response.write(num1*num2)
end sub
%>
</head>
<body>

<p>Result: <%call vbproc(3,4)%></p>

</body>
</html>


attend_write.asp

Call OpenConn_mall(conn)


dbconn_mall.asp

Sub OpenConn_mall(conn)

Set conn = Server.CreateObject("ADODB.Connection")

conn.open("xxxxxxxxxxxxx");

End Sub



Posted by hoonihoon
2014. 2. 10. 13:44


With ~ End With 문 


여러 문장에 걸쳐 동일한 객체의 문장이 있을 경우 With문을 사용하면 객체의 이름을 여러번 입력하지 않아도 된다.


. 객체의 속성이나 메서드로 구성된 하나 이상의 문장


예) 


With object

.name

.age

End With



Posted by hoonihoon
2014. 2. 10. 13:12

1. DIM (Dimension) 변수 선언 할 때 사용


Dim name;


2. Set 개체의 인스턴스를 생성할 때 사용


개체는 Object 를 의미



- 사용법


Handphone 개체의 사용 방법
1.Dim myPhone
2.Set myPhone = Server.CreateObject("Telephone.Handphone")
3.myPhone.color = "white"
4.myPhone.number = "011-9971-88XX"
5.myPhone.call("02-584-88XX")
6.myPhone.hangup()
7.Set myPhone = Nothing


1번째 줄에서는 먼저 앞으로 사용될 myPhone 이라는 변수를 선언해 놓았습니다.
그리고 2번째 줄에서는 Server.CreateObject 라는 특별한 메소드를 사용하여
'Handphone 개체의 인스턴스'를 만들어서 myPhone 이라는 변수에 저장하였습니다.
(그러므로 이제 myPhone 이라는 녀석을 Handphone 으로 사용할 수 있게 된 것입니다.)

개체(Object)는 추상적인 의미라는 말씀을 윗 부분에서 드렸습니다.
그렇기 때문에, Handphone 개체를 우리 프로그램에서 직접 가져다 사용할 수는 없고
'인스턴스(Instance)' 를 만들어서 그것을 변수에 저장하여 사용하는 것입니다.
이처럼 '개체의 인스턴스' 를 만들어서 변수에 저장할 때에 사용하는 구문이 바로 Set 구문이 되겠습니다. 

3번과 4번 줄은 속성(Property) 에 값을 할당하는 구문이 되겠습니다.
속성은 사용될 때에 이름과 값, 한 쌍으로 표현이 된다는 말씀을 위에서 드렸었는데,
그 내용이 바로 이 부분의 내용이 되는 것입니다.
보시는 것처럼 myPhone 의 color 속성에는 "white" 라는 값을 넣었으며,
myPhone 의 number 속성에는 "011-9971-88XX" 라는 값을 넣은 것입니다.
(이 구문을 통해 제 핸드폰의 색깔은 하얀 색, 그리고 번호는 "011-9971-88XX" 가 됩니다.)

그리고 5, 6번 줄은 메소드(Method) 를 실행하는 구문이 됩니다.
5번 줄은 call 이라는 메소드를 사용하여 전화를 거는 작업을 수행합니다.
전화를 걸때에는 '전화번호' 가 있어야 하므로, 인자로 "02-584-88XX" 번을 입력했으며,
이 구문을 통해 제 핸드폰은 02-584-88XX 번으로 전화를 걸기 시작합니다.
6번 줄은 전화를 끊는(hangup) 구문이 되겠습니다.
끊을 때에는 특별한 인자가 필요하지 않으므로 인자를 넘겨주지 않았습니다.

그리고 모든 작업을 완료한 다음에는 더이상 핸드폰이 필요하지 않으므로,
7번의 Set myPhone = Nothing 이라는 구문을 사용하여 개체의 인스턴스인 'myPhone' 을 메모리에서 해제합니다. 'myPhone' 을 더 이상 쓰지 않는다고 알려주는 것이지요.



3. IF ~ THEN
- IF ~ THEN 구문은 지난 강좌에서 설명드렸던 구문입니다. 반가우시죠? ^^
오늘은 단지 참과 거짓만이 아닌, 조금 더 많은 경우를 생각해 보려고 합니다.
한가지 예를 들어볼까요? intNumber 라는 변수에 어떤 숫자가 들어있다고 가정하고요.
이중에서 1,2,3 에 대한 경우의 처리가 달라야 한다면 어떻게 할까요?
네. 아마도 다음과 같이 하면 될 것 같습니다.

IF intNumber = 1 THEN
    Response.Write "intNumber 에 들어있는 수는 1입니다!"
ELSEIF intNumber = 2 THEN
    Response.Write "intNumber 에 들어있는 수는 2입니다!"
ELSEIF intNumber = 3 THEN
    Response.Write "intNumber 에 들어있는 수는 3입니다!"
ELSE
    Response.Write "intNumber 에 들어있는 수는 1,2,3 이 아닌 다른 숫자입니다!"
END IF

갑자기 Response.Write 라는 녀석이 나와서 깜짝 놀라셨을 것 같은데요.
이것은 현재 화면에 문자열을 보여주라는(출력하라는) 함수가 되겠습니다.
(지금은 우선 이 정도로만 알아두시고, 다음 기회에 조금 더 자세히 알아보도록 하겠습니다.)

위의 조건절이 이해가 가시나요?
intNumber 에 들어있는 숫자가 1이라면 가장 위의 조건을 만족하게 되고, 화면에는 두번째 라인에 있는 "intNumber 에 들어있는 수는 1입니다!" 라는 문자열이 출력되게 됩니다.
만약 2라면? 그렇다면 세번째 라인에 있는 조건을 만족하게 되고 화면에는 "intNumber 에 들어있는 수는 2입니다!" 라는 문자열이 출력되게 됩니다.
마찬가지로 3이면 다섯번째 라인에 있는 조건을 만족하게 되고 "intNumber 에 들어있는 수는 3입니다!" 라는 문자열이 화면에 출력되게 됩니다.
그런데.. 1, 2, 3 이 아닌 그 외의 수라면 어떨까요?
그때에는 어느 경우에도 해당되지 않으므로 7번째 라인에 있는 ELSE 조건에 걸리게 되고,
화면에는 "intNumber 에 들어있는 수는 1,2,3 이 아닌 다른 숫자입니다!" 가 보여집니다.

이처럼 몇가지의 조건이 있을 때, 각각의 조건에 따라 다른 과정을 거치게 하고 싶을 때 사용하는 구문이 바로 IF ~ THEN 구문이 되겠습니다.

4. SELECT CASE
- 'SELECT CASE' 문 역시 IF ~ THEN 구문과 마찬가지로 '조건 구문' 이 되겠습니다.
하지만 SELECT CASE 는 '조건이 많을 때' 주로 사용합니다. 예를 들어 볼까요?
위에서는 intNumber 라는 변수에 1,2,3 의 숫자가 들어가는 경우에만 다른 처리를 했습니다.
그런데 이번엔 3까지가 아닌 10까지 다른 처리를 하고 싶어 졌습니다. 그러면 어떻게 할까요?

물론 IF ~ THEN 으로도 가능합니다.
하지만 이렇게 조건이 많은 경우에는 보통 SELECT CASE 문을 사용합니다.
다음의 내용처럼 말이지요.

SELECT CASE intNumber
CASE 1
    Response.Write "intNumber 에 들어있는 수는 1입니다!"
CASE 2
    Response.Write "intNumber 에 들어있는 수는 2입니다!"
CASE 3
    Response.Write "intNumber 에 들어있는 수는 3입니다!"
CASE 4
    Response.Write "intNumber 에 들어있는 수는 4입니다!"
CASE 5
    Response.Write "intNumber 에 들어있는 수는 5입니다!"
CASE 6
    Response.Write "intNumber 에 들어있는 수는 6입니다!"
CASE 7,8,9
    Response.Write "intNumber 에 들어있는 수는 7,8,9 중 하나입니다!"
CASE 10
    Response.Write "intNumber 에 들어있는 수는 10입니다!"
CASE ELSE
    Response.Write "intNumber 에 들어있는 수는 1부터 10 사이의 정수가 아닙니다."
END SELECT

SELECT CASE 문의 사용법은 위와 같습니다.
SELECT CASE 다음에 조건을 검사할 변수를 위치시키고,
CASE 1, CASE 2, CASE 3... 와 같은 방법으로 조건을 확인하는 것입니다.
보시다시피 IF 문보다 훨씬 간결하고 사용이 편리합니다. (별로 어렵지 않지요?)
중간에 나오는 CASE 7,8,9 처럼 콤마(,) 를 사용하여 조건을 중복할 수도 있습니다.

IF ~ THEN 과 SELECT CASE 는 자주 사용되는 구문이므로, 잘 알아두시면 좋습니다.
(써놓고 나니까 무슨 전문 입시 학원의 강사같은 발언이군요. ^^)

5. FOR ~ NEXT
- FOR ~ NEXT 구문은 동일한 형식의 작업을 반복하려 할 때 주로 사용하는 구문입니다.
예를 들어 1부터 100까지의 숫자를 화면에 보여지게 하라는 명령이 떨어졌을 때,
'좋아, 뭐.. 그정도라면' 이라고 생각하며 빠른 타자로 1부터 100까지 입력할 수 있겠습니다.
그런데 만약 1부터 10000까지의 숫자를 화면에 보여지게 하라는 명령이 떨어졌다면...
이제부터는 더이상 농담이 아닌 상황이 발생하는 것입니다.
(계산해보니 1초에 숫자 하나씩 입력한다고 해도 얼추 3시간 정도 걸리는 군요.)

이럴 때 유용하게 사용되는 것이 바로 FOR ~ NEXT 구문입니다.

만약에 1부터 10000까지의 숫자를 화면에 출력하라는 명령이 떨어졌을 때,
FOR ~ NEXT 구문을 이용하면 다음과 같이 쓸 수 있습니다.

DIM intLoop
FOR intLoop = 1 TO 10000 STEP 1
    Response.write intLoop & "<BR>"
NEXT

이렇게 작성한 후 ASP 페이지를 실행시키면 - 직접 테스트 해보는 것도 재미있습니다 -
1부터 10000까지의 (1씩 증가하는) 숫자들의 나열을 보실 수가 있습니다.
숫자의 뒤에 <BR> 태그를 추가한 것은 '다음 줄로 바꾸기' 위해서입니다.
만약 <BR> 태그가 없다면 한줄로 주욱~ 나열된 - 보기가 꽤 어려운 - 형태가 출력됩니다.

FOR ~ NEXT 구문의 형식은 다음과 같습니다.

FOR 시작 TO  STEP 증가
    반복되어 실행될 구문
NEXT

일반적으로 많이 쓰이는 방식은..
시작 부분에 작은 수, 끝 부분에 큰 수를 넣은 다음 1씩 증가하면서 실행하는 방식입니다.
(여기서 STEP 부분은 생략할 수 있고, 생략하게 되면 기본적으로 1씩 증가하게 됩니다.)

그렇게 되면 이 조건(끝 부분)이 만족될 때까지 실행 구문이 반복적으로 실행되는 것이지요.
이처럼 FOR ~ NEXT 구문은 반복 실행해야 하는 횟수를 알고 있을 때 사용하면 편리합니다.

5. DO WHILE
- DO WHILE 문도 FOR ~ NEXT 문과 마찬가지로 동일한 형식의 반복 작업시에 사용합니다.
하지만 FOR ~ NEXT 문이 반복 실행 횟수를 정확하게 알고 있을 때 주로 사용한다면,
DO WHILE 문은 실행 횟수를 정확하게 모르고 있을 때, 또는 순환할 때마다 조건을 검사해서 계속 순환할 지 여부를 체크해야 할 때 사용하는 것이 유리합니다.

위에서 FOR ~ NEXT 문에서 사용한 예제를 DO WHILE 로 변경해 볼까요?
(참고로 아래의 내용은 FOR ~ NEXT 예제의 결과와 완전히 일치합니다.)

DIM intLoop
intLoop = 1
DO WHILE intLoop <= 10000
    Response.write intLoop & "<BR>"
    intLoop = intLoop + 1
LOOP

FOR ~ NEXT 문보다는 약간 복잡해 보이나요? 간단하게 설명을 드리도록 하겠습니다.
두번째 줄에서, 우선 DO WHILE 문을 시작하기 전에 intLoop 변수에 초기값 1을 대입합니다.
세번째 줄이 가장 중요한 부분이 되겠는데요.
DO WHILE intLoop <= 10000 이라는 부분의 의미는
'intLoop 변수에 담긴 숫자가 10000보다 같거나 작은 동안에는 계속 실행해라'
는 뜻이 됩니다. (이 내용은 순환할 때마다 매번 검사합니다.)

그리고 5번째 줄에 intLoop = intLoop + 1 이라는 구문이 있는데,
이 부분은 프로그램을 처음 공부하시는 분들께서 가장 혼동하기 쉬운 부분 중에 하나입니다.

이것은 'intLoop 와 intLoop + 1 이 같다' 는 'equal' 의 의미가 아닙니다. (말이 안되죠?)
이 구문의 의미를 해석하면, '왼쪽에 있는 intLoop 라는 변수에다가, 오른쪽에 있는 intLoop 변수의 현재 값에 1을 더한 결과 값을 대입해라' 라는 뜻이 됩니다.
('=' 은 '오른쪽에서 계산된 값'을 '왼쪽의 변수에 대입' 하라는 의미를 가지고 있습니다.
이때 사용되는 '=' 를 '대입 연산자' 라고 부릅니다. 상식으로 알아두시면 좋겠지요?)

두번째 줄에 나온 intLoop = 1 도 마찬가지입니다.
왼쪽에 있는 intLoop 라는 변수에 오른쪽에 있는 숫자 1을 대입하라는 뜻이지요.
그리하여 6번째 줄에 있는 LOOP 를 만나게 되면 다시 3번째 줄로 돌아간 다음,
조건을 다시 검사하고, 조건과 일치하면 구문을 반복하게 되는 것입니다.

순환문을 사용하실 때, 여러분들께서 주의하셔야 할 점이 있습니다.

만약 위의 DO WHILE 문에서.. 5번째 줄을 깜빡 잊고 입력하지 않았다면 어떻게 될까요?
intLoop 변수는 증가하지 않으므로 항상 1이 될 것이고..
때문에 DO WHILE intLoop <= 10000 구문은 항상 참이 되어서 계속 실행될 것입니다.
즉, 이 순환문은 절대로 종료되지 않는 것이지요.

이것을 '무한 루프' 라고 합니다. '무한하게 계속되는 순환문' 이라는 뜻이지요.
무한 루프에 빠지게 되면 컴퓨터를 강제 종료해야 하는 등, 심각한 사태가 발생할 수 있습니다.
(권장하고 싶지는 않지만, 궁금하신 분들께서는 위의 DO WHILE 문에서 5번째 줄을 생략하고 실행해 보시기 바랍니다. 아마 컴퓨터 CPU 사용률이 급격히 증가하여 컴퓨터가 느려지고, 심지어 심한 경우에는 먹통이 되어버리는 경우를 목격하실 수도 있습니다.)



출저:  태요 asp

Posted by hoonihoon
2014. 2. 3. 18:08
ASP.NET MVC 장점 3가지

- 각 컴포넌트 간의 종속성을 줄이고 모듈의 역할을 분리하여 테스트 용이

- 테스트가 상대적으로 용이
  (개별적인 컴포넌트를 독립적으로 테스트 할 수 있다)

- 모듈을 나누고, 어떤 코드를 어디에 작성해야 하는 지는 고민 하지 않아도 된다.
 그에 대한 템플릿과 규칙을 ASP.NET MVC프레임워크가 제공 한다. 규칙에 따라 개발하면 된다.


Posted by hoonihoon