2009.03.05 22:26

오늘 이시간부터는 본격적으로 프로그래밍에 필요한 사항들을 하나하나, 조목조목? 허접하게 짚어나가도록 하겠습니다.

먼저 변수에 대한 내용부터 시작하겠습니다.
변수란 무엇일까요?
쉽게 말하자면 프로그래밍에서 쓰이는 가지가지의 값들을 저장하는 공간이라고 생각하시면 될 듯합니다.

그런 변수는 Dim 문을 사용해서 선언을 할 수가 있습니다.

Dim woojja

이렇게 선언을 했을때 프로그램은 자연스레 woojja 라는 변수를 나중에 사용할 것이라고 알게 되고 변수의 크기만큼의 자리를 메모리에 준비를 하지요.
선언을 할때 다른 키워드를 사용하는 경우 Dim을 사용하지 않을 수도 있고
As 절을 사용함으로써 변수의 데이터 형식을 지정할 수 있습니다.

As 절을 사용하지 않는다면 Object 형으로 데이터 형식을 지정하게 되고요.

변수의 초기값을 지정하지 않으면 변수가 선언되는 코드가 처음 실행될때 해당 변수의 형식에 맞는 기본 초기값을 할당하게 됩니다.

Public Static newCustomer As Customer

만약 변수의 데이터 형식이 참조형식(추후에 다시 설명)일 경우 초기값은 Nothing 이 되며 As 절에 New 키워드를 포함함으로써 인스턴스를 만들수 있습니다.

Public Static newCustomer As New Customer


변수의 Scope
변수는 액세스 수준에 따라서 변수의 범위가 영향을 줄수 있습니다.

조건문, Loop 같이 블록 또는 프로시져 수준에서/모듈 또는 네임스페이스 수준의 범위 에서 참조할 수 있도록 할 수 있습니다.

첫번째 블락 사이일때는 변수 선언을 For문의경우 For와 Next 사이에 변수를 선언하고
두번째 sub나 Function 프로시져 내에 변수를 선언합니다. 이런 경우는 그 프로시져 내에서, 프로시져 내의 블락 내에서 참조가능하겠지요.
세번째 모듈이라 함은 클래스나 구조체를 말하며 그 내부에 선언한 변수는 모듈내의 모든 프로시져에서 접근가능하며 private키워드를 포함합니다.
네임스페이스내의 변수선언은 Friend 나 public 키워드를 사용해서 변수를 선언하면 되는 데 이에 대한 설명은 다시한번 이루어 지겠죠?.

이렇게 변수의 접근범위를 설정함으로써 OOP 의 장점을 살릴수 있고 범위를 좁힘으로써 외부의 악의의 코드로 부터 우리의 소스를 보호할 수 있을 것입니다.



'VB.NET' 카테고리의 다른 글

[VB.NET] Visual Basic 2005 Power Packs  (0) 2009.03.05
[VB.NET] VisualBasic.NET 키워드  (0) 2009.03.05
[VB.NET] 배열  (4) 2009.03.05
[VB.NET] 변수사용  (0) 2009.03.05
[VB.NET] As Customer와 As New Customer 의 차이...  (0) 2009.03.05
[VB.NET] Null Class  (0) 2009.03.05
Posted by woojja

Public newCustomer As Customer
Public newCustomer As New Customer

의 차이점을 아실려면 먼저 메모리 구조와 할당 방식을 아셔야 합니다.

CLR 은 메모리를 스택과 힙으로 관리하고 있습니다.
이 스택과 힙을 아셔야 하고요..
다른부분도 있지만 현재 설명하기 위해서 다른 부분은 생략하기로 하죠.

변수를 분류하자면 크게 Value 타입과 Reference 타입 두가지로 나뉠 수 있습니다.
Value 타입은 Stack 에 저장이 되고요, Reference 타입은 Stack과 Heap 에 저장이 됩니다.
Value(값) 타입은 Stack에만 저장되니 간단하지요.


변수를 선언하게 되면 먼저 스택에 할당됩니다.
Public newCustomer As Customer
이렇게 하면 newCustomer 가 스택에 할당이 되죠.
변수의 Type 이 Reference Type 이고
선언된 변수를 사용하기 위해서는 Instance를 생성해야 하는데요..
이때 사용하는 키워드가 New 인것입니다.

New를 사용해서 클래스의 인스턴스를 생성하게 되면 Heap 에 클래스가 차지하는 만큼의 크기로 메모리가 할당되고 Stack 에는 생성된 인스턴스가 위치하고있는 Heap의 주소가 저장되게 됩니다.
(그래서 Reference Type(참조타입)이라 하는 것입니다.)

인스턴스 형성의 시기는 소스상에 어느위치가 되던 상관은 없겠죠.

다시말해
Public newCustomer As New Customer
라는 말은

Public newCustomer As Customer

newCustomer = New Customer() 와 같은 의미가 되겠죠.

newCustomer = New Customer() 이 구문을 쓰는 시기가 인스턴스를 형성하는 시기가 될 것입니다.


그럼 Public newCustomer As New Customer 이 말은 무엇을 말하는 지 알수 있겠죠?
선언과 동시에 인스턴스를 형성하겠다는 의미인 것입니다.


메모리 영역을 보면 Static 은 다른 변수와는 특수한 형태이기때문에 별도의 영역에 할당이 됩니다.
그래서 위의 예에서는 질문하신 부분에서 Static을 지워서 설명드린거구요.
메모리에 대한 그림을 보시고 공부하시면 재미를 조금더 느끼실수 있으실 겁니다.

그리고 좀 더 나아가게 되면 Boxing과 UnBoxing 개념가지도 넓혀 갈수있지요..
이 부분은 나중에 기회가 되면 설명을 하기로 하죠... ^^


행복한 고수 되세요... ^^


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\



'VB.NET' 카테고리의 다른 글

[VB.NET] Visual Basic 2005 Power Packs  (0) 2009.03.05
[VB.NET] VisualBasic.NET 키워드  (0) 2009.03.05
[VB.NET] 배열  (4) 2009.03.05
[VB.NET] 변수사용  (0) 2009.03.05
[VB.NET] As Customer와 As New Customer 의 차이...  (0) 2009.03.05
[VB.NET] Null Class  (0) 2009.03.05
Posted by woojja

친구의 물어오는 질문에 제가 뭘 알겠습니까? 윈도우즈에서 F1 키를 눌러 Helper 를 찾아보았습니다.
엄청난 놈을 찾아 냈습니다. (제겐... ^^;)
그저 설치 폴더 속에 들어가 있는 bat 파일을 보며 이런 것들을 만드니라 이사람들 고생좀 했겠다라는 생각을 잠시 하고... 내가 이렇게 만들일이 있을까? 라는 생각을 하며 그냥 지나쳤던...
근데 이제는 만들일이 있을수도 있겠구나 하는 생각이 들어 다른 분들도 보시면 도움이 되실것도 같아 올립니다.

배포프로젝트 안에서는 이런 사항들을 모두 해줄수 있겠지만 배치파일을 만들거나 command 창에서 사용하실 일이 있으실 수도 있으니 어떤 사항이 있구나 정도, 이렇게도 관리할 수 있겠구나 정도 알아두시면 좋으실 것 같습니다. ^^

windows 2003 서버의 F1 키를 누르시고
검색 키 에 "새 명령줄 도구" 라고 입력하시어 검색하시면 34번째에 나오네요... ^^

리스트 중 iisweb 에 대한 사항입니다.

행복한 하루 되세요...

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Iisweb.vbs: IIS 웹 사이트 관리 스크립트
IIS(인터넷 정보 서비스) 6.0이 있는 Windows Server 2003을 실행하는 서버에서 웹 사이트를 만들고 삭제하고 목록을 표시합니다. 또한 웹 사이트를 시작, 중지 및 일시 중지합니다.

명령 구문을 보려면 해당 명령을 클릭하십시오.

iisweb /create

IIS(인터넷 정보 서비스) 6.0이 있는 Windows Server 2003을 실행하는 서버에서 웹 사이트를 만듭니다.

구문
iisweb[.vbs]/create Path SiteName [/b Port] [/i IPAddress] [/d HostHeader] [/dontstart] [/s Computer [/u [Domain\]User [/p Password]]]

매개 변수
Path
필수 요소입니다. 웹 사이트에 대한 콘텐트 파일의 위치를 지정합니다. 경로는 로컬(예: C:\Projects\HTML)이어야 합니다. 지정된 경로가 없으면 Iisweb.vbs가 그 경로를 만듭니다.
Path 매개 변수는 명령에서 SiteName 매개 변수 바로 앞에 와야 합니다. 그렇지 않으면 Iisweb.vbs가 사이트 정보를 제대로 해석하지 못합니다.

SiteName
필수 요소입니다. 웹 사이트의 이름을 지정합니다.
/b Port
웹 사이트의 TCP 포트 번호를 지정합니다. 기본 설정은 80입니다.
/i IPAddress
웹 사이트의 IP 주소를 지정합니다. 이 매개 변수를 지정하지 않을 경우 기본값은 지정하지 않은 모든 IP로 해당 컴퓨터에서 다른 사이트에 지정하지 않은 모든 IP 주소를 사이트에 할당합니다. 각 IIS 서버에서 한 사이트만 지정하지 않은 모든 IP로 설정할 수 있습니다.
/d HostHeader
웹 사이트의 호스트 헤더 이름(예: www.microsoft.com)을 지정합니다. 기본적으로 사이트에는 호스트 헤더 이름이 없으므로 IP 주소나 포트 번호로 식별해야 합니다.
/dontstart
웹 사이트가 만드는 즉시 자동 시작되지 않음을 나타냅니다. 기본적으로 IIS는 /create 명령이 성공적으로 완료될 때 웹 사이트를 시작합니다.
/s Computer
지정된 원격 컴퓨터에서 스크립트를 실행합니다. 백슬래시를 사용하지 않고 컴퓨터 이름이나 IP 주소를 입력합니다. 기본적으로 스크립트는 로컬 컴퓨터에서 실행됩니다.
/u [Domain\]User
지정한 사용자 계정의 권한으로 스크립트를 실행합니다. 이 계정은 원격 컴퓨터의 Administrators 그룹 구성원이어야 합니다. 기본적으로 스크립트는 현재 로컬 컴퓨터 사용자의 권한으로 실행됩니다.
/p Password
/u 매개 변수에서 지정한 사용자 계정의 암호를 지정합니다. 이 매개 변수를 생략하면 스크립트는 암호를 입력하라는 메시지를 표시하고 사용자가 입력한 텍스트를 흐리게 만듭니다.
/?
명령 프롬프트에서 도움말을 표시합니다.
설명
XOX
Path 매개 변수는 명령에서 SiteName 매개 변수 바로 앞에 와야 합니다. 그렇지 않으면 Iisweb.vbs가 사이트 정보를 제대로 해석하지 못합니다.
호스트 헤더 이름과 인터넷 서버를 연관시키도록 DNS가 구성되어야 합니다. 그렇지 않으면 사이트가 시작되지 않습니다.
Iisweb.vbs는 웹 사이트의 포트 번호, IP 주소 또는 호스트 헤더를 확인하지 않으며 이들 바인딩이 서버 내에서 고유한지도 확인하지 않습니다. 잘못된 바인딩 또는 충돌하는 바인딩으로 사이트를 만들면 해당 사이트가 시작되지 않습니다.
Iisweb.vbs를 사용하여 새 웹 사이트를 만들 때는 사이트를 만들고 그 내용을 식별하는 데 필요한 기본 속성만 지정합니다. Iisweb.vbs는 새 웹 사이트를 설정할 때 IIS가 사용하는 것과 같은 기본 속성을 사용하고 상속 속성에 대한 것과 같은 규칙을 준수합니다. 사이트에 대한 고급 속성을 구성하려면 IIS Manager를 사용합니다.

다음 예제는 특정 상황에서 iisweb /create를 만드는 방법을 보여 줍니다.
로컬 컴퓨터에서 웹 사이트를 만들려면
다음 명령은 C:\Rome에 저장된 파일에서 My Vacation 웹 사이트를 만듭니다. 이 명령은 /d 매개 변수를 사용하여 웹 사이트의 호스트 헤더를 지정합니다. 또한 웹 사이트가 자동으로 시작되지 않도록 /dontstart 매개 변수도 사용합니다. 이 명령을 사용하면 사이트를 시작하기 전에 DNS에 호스트 헤더 이름을 추가할 수 있습니다.

iisweb /create C:\Rome "My Vacations" /d www.reskit.com /dontstart

이에 대한 응답으로 Iisweb.vbs는 새 웹 사이트의 기본 속성을 표시합니다. 명령이 사이트가 자동으로 시작되지 않도록 지정했기 때문에 상태는 중지됨입니다.

IIS가 새 웹 사이트에 대해 생성한 메타베이스 경로는 W3SVC와 임의로 생성된 ID로 구성됩니다.


Connecting to server ...Done.
Server = IIS-TEST
Site Name = My Vacations
Metabase Path = W3SVC/1211348328
IP = ALL UNASSIGNED
Host = www.reskit.com
Port = 80
Root = C:\Rome
Status = STOPPED

원격 컴퓨터에서 웹 사이트를 만들려면
다음 명령은 Srv01 원격 서버에서 Marketing 웹 사이트를 만듭니다. 사이트를 Srv01의 D:\New Initiatives\Marketing\HTMFiles 디렉터리에 저장된 파일과 연관시킵니다. 명령은 /i 매개 변수를 사용하여 사이트의 IP 주소를 지정합니다. /s 매개 변수를 사용하여 원격 컴퓨터를 지정하고, /u 및 /p 매개 변수를 사용하여 사용자의 Administrator 계정 권한으로 스크립트를 실행합니다.

iisweb /create "D:\New Initiatives\Marketing\HTMFiles" Marketing /i 172.30.163.244 /s Srv01 /u Admin6 /p A76QVJ32#

이에 대한 응답으로 Iisweb.vbs는 새 웹 사이트의 기본 속성을 표시합니다.


Server = SRV01
Site Name = Marketing
Metabase Path = W3SVC/1907510956
IP = 172.30.163.244
Host = NOT SPECIFIED
Port = 80
Root = D:\New Initiatives\Marketing\HTMFiles
Status = STARTED

iisweb /delete, /start, /stop, /pause

IIS(인터넷 정보 서비스) 6.0이 있는 Windows Server 2003을 실행하는 서버에서 웹 사이트를 삭제합니다. 또한 웹 사이트를 시작, 중지 및 일시 중지합니다.

구문
iisweb[.vbs] {/delete | /start | /stop | /pause} WebSite [WebSite...] [/s Computer [/u [Domain\]User [/p Password]]]

매개 변수
WebSite
필수 요소입니다. 웹 사이트의 사이트 이름이나 메타베이스 경로를 지정합니다.
웹 사이트는 고유하게 식별됩니다. 둘 이상의 웹 사이트에 동일한 설명이 포함된 이름이 있을 경우 메타베이스 경로를 사용하여 웹 사이트를 확인해야 합니다.

/s Computer
지정된 원격 컴퓨터에서 스크립트를 실행합니다. 백슬래시를 사용하지 않고 컴퓨터 이름이나 IP 주소를 입력합니다. 기본적으로 스크립트는 로컬 컴퓨터에서 실행됩니다.
/u [Domain\]User
지정한 사용자 계정의 권한으로 스크립트를 실행합니다. 이 계정은 원격 컴퓨터의 Administrators 그룹 구성원이어야 합니다. 기본적으로 스크립트는 현재 로컬 컴퓨터 사용자의 권한으로 실행됩니다.
/p Password
/u 매개 변수에서 지정한 사용자 계정의 암호를 지정합니다. 이 매개 변수를 생략하면 스크립트는 암호를 입력하라는 메시지를 표시하고 사용자가 입력한 텍스트를 흐리게 만듭니다.
/?
명령 프롬프트에서 도움말을 표시합니다.
설명
XOX

다음 예제는 특정 상황에서 iisweb /delete, /start, /stop 및 /pause를 사용하는 방법을 보여 줍니다.
웹 사이트를 삭제하려면
다음 명령은 로컬 컴퓨터에서 My First Novel 웹 사이트를 삭제합니다.

iisweb /delete "My First Novel"

이에 대한 응답으로 Iisweb.vbs는 웹 사이트를 해당 메타베이스 경로, W3SVC/409413479로 식별하는 성공 메시지를 표시합니다.

W3SVC/409413479 서버가 삭제되었습니다.
원격 컴퓨터에서 여러 웹 사이트를 삭제하려면
다음 명령은 Svr01 원격 컴퓨터에서 Finance, Work Group 및 Logo 웹 사이트를 삭제합니다. 명령은 Logo 웹 사이트를 메타베이스 경로, W3SVC/79116006으로 식별합니다.

iisweb /delete Finance "Work Group" W3SVC/79116006 /s Svr01

이에 대한 응답으로 Iisweb.vbs는 각 웹 사이트를 해당 메타베이스 경로로 식별하는 성공 메시지를 표시합니다.


Connecting to server ...Done.
Server W3SVC/1977437537 has been DELETED.
Server W3SVC/1509060625 has been DELETED.
Server W3SVC/79116006 has been DELETED.

원격 컴퓨터에서 웹 사이트를 다시 시작하려면
다음 명령은 Srv01 원격 컴퓨터에서 Products 웹 사이트를 중지한 다음 다시 시작합니다. 명령은 사이트를 그 메타베이스 경로, W3SVC/1509060225로 식별합니다. 명령은 /s 매개 변수를 사용하여 원격 컴퓨터를 지정합니다. 이 예에서 현재 로컬 컴퓨터 사용자는 원격 컴퓨터의 관리자이기도 하므로 /u 및 /p 매개 변수가 생략되었습니다.

iisweb /stop w3svc/1509060225 /s Srv01

iisweb /start w3svc/1509060225 /s Srv01

원격 컴퓨터에서 웹 사이트를 일시 중지하고 다시 시작하려면
다음 명령은 Srv16 원격 컴퓨터의 Marketing 및 Finance 웹 사이트를 일시 중지한 다음 다시 시작합니다. 또한 /s 매개 변수를 사용하여 원격 컴퓨터를 지정하고, /u 및 /p 매개 변수를 사용하여 사용자의 Administrator 계정 권한으로 명령을 실행합니다.

iisweb /pause Marketing Finance /s Srv16 /u Alice /p p@##word

iisweb /start Marketing Finance /s Srv16 /u Alice /p p@##word

iisweb /query

IIS(인터넷 정보 서비스) 6.0이 있는 Windows Server 2003을 실행하는 서버에 있는 웹 사이트를 표시합니다.

구문
iisweb[.vbs] /query [WebSite [WebSite...]] [/s Computer [/u [Domain\]User [/p Password]]]

매개 변수
WebSite
쿼리를 지정된 웹 사이트로 제한합니다. 해당 웹 사이트의 이름이나 메타베이스 경로를 입력하십시오. 기본값은 IIS 서버에 있는 모든 웹 사이트를 표시하는 것입니다.
웹 사이트는 고유하게 식별됩니다. 둘 이상의 웹 사이트에 동일한 설명이 포함된 이름이 있을 경우 메타베이스 경로를 사용하여 웹 사이트를 확인해야 합니다.

/s Computer
지정된 원격 컴퓨터에서 스크립트를 실행합니다. 백슬래시를 사용하지 않고 컴퓨터 이름이나 IP 주소를 입력합니다. 기본적으로 스크립트는 로컬 컴퓨터에서 실행됩니다.
/u [Domain\]User
지정한 사용자 계정의 권한으로 스크립트를 실행합니다. 이 계정은 원격 컴퓨터의 Administrators 그룹 구성원이어야 합니다. 기본적으로 스크립트는 현재 로컬 컴퓨터 사용자의 권한으로 실행됩니다.
/p Password
/u 매개 변수에서 지정한 사용자 계정의 암호를 지정합니다. 이 매개 변수를 생략하면 스크립트는 암호를 입력하라는 메시지를 표시하고 사용자가 입력한 텍스트를 흐리게 만듭니다.
/?
명령 프롬프트에서 도움말을 표시합니다.
설명
XOX

다음 예제는 특정 상황에서 iisweb /query를 사용하는 방법을 보여 줍니다.
로컬 컴퓨터에 있는 웹 사이트를 쿼리하려면
다음 명령은 로컬 컴퓨터에 있는 웹 사이트를 표시합니다.

iisweb /query

이에 대한 응답으로 Iisweb.vbs는 로컬 컴퓨터에 있는 모든 IIS 웹 사이트를 표시합니다.


Site Name (Metabase Path) Status IP Port Host
=============================================================================
Default Web Site (W3SVC/1) STARTED ALL 90 N/A
Products (W3SVC/1948497947) STARTED 172.30.163.244 80 N/A
Finance (W3SVC/1211348328) STARTED 172.30.152.249 80 N/A
Marketing (W3SVC/1907510956) STARTED ALL 95 www.reskit.com

원격 컴퓨터에 있는 특정 웹 사이트를 쿼리하려면
다음 명령은 Srv01 원격 컴퓨터에서 Marketing 웹 사이트를 검색합니다. /s 매개 변수를 사용하여 원격 컴퓨터를 지정하고, /u 및 /p 매개 변수를 사용하여 사용자의 Administrator 계정 권한으로 스크립트를 실행합니다.

iisweb /query Marketing /s Srv01 /u Admin6 /p A76QVJ32#

이에 대한 응답으로 Iisweb.vbs는 Srv01에 있는 Marketing 웹 사이트를 표시합니다.


Site Name (Metabase Path) Status IP Port Host
=============================================================================
Marketing (W3SVC/1907510956) STOPPED ALL 80 www.reskit.com

여러 웹 사이트를 쿼리하려면
다음 명령은 로컬 컴퓨터에 있는 Marketing 및 Finance 웹 사이트의 상태를 표시합니다. 메타베이스 경로도 유효하지만 사이트 이름을 사용하여 웹 사이트를 식별합니다.

iisweb /query Marketing Finance

이에 대한 응답으로 Iisweb.vbs는 Marketing 및 Finance 웹 사이트를 표시합니다.


Site Name (Metabase Path) Status IP Port Host
==============================================================================
Marketing (W3SVC/1907510956) STARTED ALL 80 www.reskit.com
Finance (W3SVC/1509060625) STARTED 192.168.125.225 80 www.reskit2.com

설명
Iisweb.vbs는 IIS Manager에서 사용할 수 있는 것과 동일한 작업을 수행합니다. 한 도구를 사용하여 IIS 웹 사이트를 관리할 수 있습니다.
명령을 발행하는 컴퓨터는 XOX 또는 Windows Server 2003 운영 체제를 실행 중이어야 합니다. 사용자는 명령이 영향을 주는 컴퓨터의 Administrators 그룹 구성원이어야 합니다.
명령이 영향을 주는 컴퓨터는 IIS(인터넷 정보 서비스) 6.0이 설치된 Windows Server 2003을 실행 중인 서버여야 합니다.
Iisweb.vbs는 지정된 컴퓨터의 IIS 서버에 연결되어 있는 경우 "서버에 연결 중" 메시지를 표시합니다. 이 메시지는 로컬 컴퓨터에서든 원격 컴퓨터에서든 Iisweb.vbs를 사용할 때마다 나타납니다.
XOX



Posted by woojja
2009.03.05 22:21

Utility 로 쓰면 어떨까 해서올립니다.
첫 소스는 codeproject 에서 가져왔는데요
조금 조금씩 수정했습니다.
코드보시면 이걸 왜 이렇게 했을까... 라는 생각을 갖게 하는 부분들이 있습니다. ㅋㅋ
필요하신 부분 있으시면 수정해서 사용하시면 좋을 듯합니다.
이런 코드도 있드라 정도로 생각해 두시면... ^^
이런식으로 자신만의 함수들을 따로 만들어 놓으시면
자신만의 프래임웍 유틸리티를 만들수 있겠죠? ^^


Imports System
Imports System.Reflection

Public Class Null

' define application encoded null values
Public Shared ReadOnly Property NullShort() As Short
  Get
    Return -1
  End Get
End Property
Public Shared ReadOnly Property NullInteger() As Integer
  Get
    Return -1
  End Get
End Property
Public Shared ReadOnly Property NullSingle() As Single
  Get
    Return Single.MinValue
  End Get
End Property
Public Shared ReadOnly Property NullDouble() As Double
  Get
    Return Double.MinValue
  End Get
End Property
Public Shared ReadOnly Property NullDecimal() As Decimal
  Get
    Return Decimal.MinValue
  End Get
End Property
Public Shared ReadOnly Property NullDate() As Date
  Get
    Return Date.MinValue
  End Get
End Property
Public Shared ReadOnly Property NullString() As String
  Get
    Return ""
  End Get
End Property
Public Shared ReadOnly Property NullBoolean() As Boolean
  Get
    Return False
  End Get
End Property
Public Shared ReadOnly Property NullGuid() As Guid
  Get
    Return Guid.Empty
  End Get
End Property

' sets a field to an application encoded null value ( used in BLL layer )
Public Shared Function SetNull(ByVal objValue As Object, ByVal objField As Object) As Object
If IsDBNull(objValue) Then
  If TypeOf objField Is Short Then
    Return NullShort
  ElseIf TypeOf objField Is Integer Then
    Return NullInteger
  ElseIf TypeOf objField Is Single Then
    Return NullSingle
  ElseIf TypeOf objField Is Double Then
    Return NullDouble
  ElseIf TypeOf objField Is Decimal Then
    Return NullDecimal
  ElseIf TypeOf objField Is Date Then
    Return NullDate
  ElseIf TypeOf objField Is String Then
    Return NullString
  ElseIf TypeOf objField Is Boolean Then
    Return NullBoolean
  ElseIf TypeOf objField Is Guid Then
    Return NullGuid
  Else ' complex object
    Return Nothing
  End If
Else ' return value
  Return objValue
End If
End Function

' sets a field to an application encoded null value ( used in BLL layer )
Public Shared Function SetNull(ByVal objPropertyInfo As PropertyInfo) As Object
  Select Case objPropertyInfo.PropertyType.ToString
    Case "System.Int16"
      Return NullShort
    Case "System.Int32", "System.Int64"
      Return NullInteger
    Case "System.Single"
      Return NullSingle
    Case "System.Double"
      Return NullDouble
    Case "System.Decimal"
      Return NullDecimal
    Case "System.DateTime"
      Return NullDate
    Case "System.String", "System.Char"
      Return NullString
    Case "System.Boolean"
      Return NullBoolean
    Case "System.Guid"
      Return NullGuid
    Case Else
      ' Enumerations default to the first entry
      Dim pType As Type = objPropertyInfo.PropertyType
      If pType.BaseType.Equals(GetType(System.Enum)) Then
        Dim objEnumValues As System.Array = System.Enum.GetValues(pType)
        Array.Sort(objEnumValues)
        Return System.Enum.ToObject(pType, objEnumValues.GetValue(0))
      Else ' complex object
        Return Nothing
      End If
    End Select
End Function

' convert an application encoded null value to a database null value ( used in DAL )
Public Shared Function GetNull(ByVal objField As Object, ByVal objDBNull As Object) As Object
  GetNull = objField
  If objField Is Nothing Then
    Return objDBNull
  ElseIf TypeOf objField Is Short Then
    If Convert.ToInt16(objField) = NullShort Then
      Return objDBNull
    End If
  ElseIf TypeOf objField Is Integer Then
    If Convert.ToInt32(objField) = NullInteger Then
      Return objDBNull
    End If
  ElseIf TypeOf objField Is Single Then
    If Convert.ToSingle(objField) = NullSingle Then
      Return objDBNull
    End If
  ElseIf TypeOf objField Is Double Then
    If Convert.ToDouble(objField) = NullDouble Then
      Return objDBNull
    End If
  ElseIf TypeOf objField Is Decimal Then
    If Convert.ToDecimal(objField) = NullDecimal Then
      Return objDBNull
    End If
  ElseIf TypeOf objField Is Date Then
' compare the Date part of the DateTime with the DatePart of the NullDate ( this avoids subtle time differences )
    If Convert.ToDateTime(objField).Date = NullDate.Date Then
      Return objDBNull
    End If
  ElseIf TypeOf objField Is String Then
    If objField Is Nothing Then
      Return objDBNull
    Else
      If objField.ToString = NullString Then
        Return objDBNull
      End If
    End If
  ElseIf TypeOf objField Is Boolean Then
    If Convert.ToBoolean(objField) = NullBoolean Then
      Return objDBNull
    End If
  ElseIf TypeOf objField Is Guid Then
    If CType(objField, System.Guid).Equals(NullGuid) Then
      Return objDBNull
    End If
  End If
End Function

' checks if a field contains an application encoded null value
Public Shared Function IsNull(ByVal objField As Object) As Boolean
  If Not objField Is Nothing Then
    If TypeOf objField Is Integer Then
      Return objField.Equals(NullInteger)
    ElseIf TypeOf objField Is Single Then
      Return objField.Equals(NullSingle)
    ElseIf TypeOf objField Is Double Then
      Return objField.Equals(NullDouble)
    ElseIf TypeOf objField Is Decimal Then
      Return objField.Equals(NullDecimal)
    ElseIf TypeOf objField Is Date Then
      Dim objDate As DateTime = CType(objField, DateTime)
      Return objDate.Date.Equals(NullDate.Date)
    ElseIf TypeOf objField Is String Then
      Return objField.Equals(NullString)
    ElseIf TypeOf objField Is Boolean Then
      Return objField.Equals(NullBoolean)
    ElseIf TypeOf objField Is Guid Then
      Return objField.Equals(NullGuid)
    Else ' complex object
      Return False
    End If
  Else
    Return True
  End If
End Function

End Class



'VB.NET' 카테고리의 다른 글

[VB.NET] Visual Basic 2005 Power Packs  (0) 2009.03.05
[VB.NET] VisualBasic.NET 키워드  (0) 2009.03.05
[VB.NET] 배열  (4) 2009.03.05
[VB.NET] 변수사용  (0) 2009.03.05
[VB.NET] As Customer와 As New Customer 의 차이...  (0) 2009.03.05
[VB.NET] Null Class  (0) 2009.03.05
Posted by woojja

오늘은 4번에 이어 간단히 설명하려 합니다.

저번에 .NET Framework 까지 간단히 설명을 했었는데요.


오늘은
Enterprise Server군
Building Block Service
그리고 이모든것들을 통합해서 개발할 수 있는 VisualStudio

에 대해서.. 간략히 설명하기로 하죠...

Enterprise server 군은...
저번에도 잠시 설명했던 것과 같이

.NET 을 이야기 할때 항상 함께 이야기가 나오게 되는 JAVA.
같은? 개념의 VM을 사용하지만 많은 차이점을 느끼게 하는 요소중의 하나가 Server군입니다.

두 VM 의 가장큰 차이점은 JAVA 는 JAVA 만을 위한 VM 이지만 CLR 의 경우 여러 Laguage 에서 사용할 수 있는 VM 이라는 것이겠구요.
여러기능을 가지고 있는 서버군들이 .NET Service를 위해 .NET 을 포커스로 맞추고 개발되어지고 있고 .NET을 뒷받침하고 있습니다.

Building Block Service 는 쉽게 이야기 해서 이미 만들어진 서비스라고 보시면 될 것이구요 예를 든다고 하면 Passport service를 예로 들수 있을 것을 것입니다.
회원들의 인증에 대한 서비스를 제공하지요
이런 서비스들이 구축되어지고 사용하므로써 실제 환경에서 고객, 기업, 사용자들이 원하는 개발을 하게될때 유연?(만드는 사람에 따라서 다르긴 하겠지만..)하고 쉽고 빠른 개발을 할 수 있을 것이며 원하는 모델에 가까운 결과물이 나올 수있을 것입니다.

그리고 마지막으로 지금까지 열거한 사항들(.NET Framework, .NET Server, Block Service ) 모두를 하나의 IDE 내에서 접근 가능하도록 통합 하고 각각의 요소들을 개발하는데 쉽고 빠른 개발을 할 수 있도록 도와주는 Visual Studio 가 있다고 말씀드릴수 있을 것입니다.
이런 VS 가 짱이라는 거죠. ^^


오늘 너무 간단히 짚고 넘어갔나요?
지난시간에 걍 확 해버리는 건데...

다음에는 좀 여유를 가지고 이야기 해 나갈 수있도록 하겠습니다.
요즘 프로젝트에 투입이 되서... 쬐끔 바쁠라 그러거든요...

그래도 열심히 적어보도록 하겠습니다. 텀이 길어지면 "이눔이 빠졌네... " 라기 보다 "요즘 플젝하니라 바쁘구나" 라고 생각해주삼... ^^


오늘도 행복한 하루되시구요.

고수되세요... 그럼 꾸뻑..


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\



Posted by woojja
TAG .NET