GSI

악성 쿼리를 찾는데 도움이 될듯 합니다.
현재 쿼리 문이 io를 어떻게 사용하고 있는지를 알려 줍니다.

select * from tb_double

이 쿼리를 날리게 되면 메시지 창에 (1000개 행 적용됨)
이라는 구문을 보실수 있습니다.

하지만 더 디테일 하게 보게 되면
select 을 하기 위해서 전체 몇 페이지를 읽고 있으며,
어떤 부하가 걸리고 있는지를 볼 수 있습니다.

set statistics io on
select * from tb_double

 



이상..

Posted by gsi
:


use fastDectionTest
go

set nocount on

-- 테이블을 지웁니다.
drop table tb_double

-- 테이블을 생성합니다.
cteate table tb_double
(
id int identity,
ph int null
)

-- 테이블을 하나 추가해봅니다.
insert tb_double(ph) values(30)
Posted by gsi
:


이걸로 해도 웹 페이지의 설정은 다 바꾸어 주어야 하는듯 하다.

설치파일 :
.

인터넷 옵션은 아래와 같은 부분을 "사용" 으로 해줘야 제대로 되는 것을 확인할 수 있다.
Posted by gsi
:

방명록 기본 코드

이름, 이메일, 컨텐츠, 비밀번호, 입력날짜, 입력 IP로 구성된 심플 방명록이다.
DB에 Insert 하는 것과 Select로 GridView에 추가 하는 내용이 포함되어 있다.

DB 쿼리 기본 내용

cs 기본 파일

Posted by gsi
:

애플리케이션 카운터 설정 및 세션 카운터 설정 방법
애플리케이션은 현재 애플리케이션이 생성된 때부터 카운터 되는 고유한 값이다.
세션 카운터는 접속한 사용자에 따라서 다르게 나타나는 카운터 값이다.
** 이때 애플리케이션 및 세션 카운터를 초기화를 해주고 싶다면 Global.aspx 에서 제공된 메소드에서
    처리해야 한다.

cs 기본 파일

Posted by gsi
:

단순하게 이름, 이메일, 타이틀, 입력날짜, 입력 IP 등을 입력 받는 게시판입니다.

Asp.Net에서 사용하는 DB 관련 기본 코드 입니다.
1. DB를 생성하고 6개의 기능별 요악한 쿼리 파일
2. DB의 내용을 입력하는 코드
3. DB의 내용을 가져와서 DataGrid에 뿌려주는 코드

DB 기본 쿼리 파일

cs 기본 파일

Posted by gsi
:


단순하게 고객 이름, 이메일, 패스워드 등을 입력 받는 게시판입니다.

Asp.Net에서 사용하는 DB 관련 기본 코드 입니다.
1. DB를 생성하고 6개의 기능별 요악한 쿼리 파일
2. DB의 내용을 입력하는 코드
3. DB의 내용을 가져와서 DataGrid에 뿌려주는 코드

DB 기본 쿼리 파일

cs 기본 파일 - 고객 입력

cs 기본 파일 - 고객 리스트

Posted by gsi
:

Asp.Net에서 사용하는 DB 관련 기본 코드 입니다.
1. DB를 생성하고 6개의 기능별 요악한 쿼리 파일
2. DB의 내용을 입력하는 코드
3. DB의 내용을 가져와서 DataGrid에 뿌려주는 코드

DB 기본 쿼리 파일



cs 기본 파일


aspx 기본 파일

Posted by gsi
:

DB 제작할때 쿼리 문은 항상 작성하는 습관을 들이자.
이 코드를 통해서 여러가지 테스트할때 바로바로 적용해볼 수 있도록 하기 위함이다.

[순서]
1. UDL 파일을 만들어서 DB 커넥션 문을 저장해 놓는다.
2. 쿼리 테이블을 제작
3. 필요하면 로그인 계정 추가
4. 샘플 쿼리 문을 만든다. 아래와 같이
use exam
go

-- 고객 테이블
Create Table dbo.Customers
(
 CustomerID int Identity(1,1) Primary Key Not NULL, --일련번호
 Name Varchar(25) Null, --이름
 Email Varchar(100) Null, --이메일
 RegistDate DateTime Default(GetDate()) --등록일
)
Go

--입력 예시
Insert Customers Values('홍길동', 'h@h.com', GetDate())
--출력 예시
Select * From Customers Order By CustomerID Desc
--세부출력 예시
Select * From Customers Where Name = '홍길동'
--수정 예시
Begin Tran
 Update Customers
 Set Name = '백두산', Email = 'b@b.com'
 Where Name = '홍길동' And Email = 'h@h.com'
--RollBack Tran
Commit Tran
--삭제 예시
Delete Customers Where Name = '백두산'
--검색 예시
Select * From Customers
Where Name Like '%백%' Or Email Like '%b%'

수정 및 삭제시에는 트랜을 꼭 해주는것도 좋을듯 하다.

Posted by gsi
:

웹 개발의 목표를 한동안 asp, php, jsp를 놓고
고심을 많이 했다.

현재 내가 하고 있는 기술을 최대한 접목을 해야,
속도전에서 이길수 있을거 같다는 생각이 들었다.

내가 가지고 있는건 뭘까?..
C++, MFC, C# 정도일 것이다.
그래서 결정한 부분은 ASP.NET 을 시작하도록 하자.

물론 시작보다, 수요가 적긴 하지만.
내가 잘 할수 있는걸 사용해서 최대한의 효과를 이끌어 내는 것.
그것이 내가 해야될 부분인듯 하다.

새로운 계획을 잡아서 실행해 보자.

Posted by gsi
:

void ChoiceDirectoryPath(char* pathFolder)
{
 ASSERT( pathFolder );
 
 sprintf( pathFolder, "" );
 
 //CString m_strDirPath;
 ITEMIDLIST *pidlBrowse;
 char pszPathname[MAX_PATH];
 BROWSEINFO BrInfo;
 BrInfo.hwndOwner = NULL; //GetSafeHwnd();
 BrInfo.pidlRoot = NULL;
 memset( &BrInfo, 0, sizeof(BrInfo) );
 BrInfo.pszDisplayName = (LPSTR)pszPathname;
 BrInfo.lpszTitle = _T("폴더를 선택해 주세요.");
 BrInfo.ulFlags = BIF_RETURNONLYFSDIRS;
 // 다이얼로그 뛰우기
 pidlBrowse = SHBrowseForFolder(&BrInfo);
 if(pidlBrowse != NULL)
 {
  BOOL bSuccess = ::SHGetPathFromIDList(pidlBrowse, (LPSTR)pszPathname);
  if( bSuccess )
  {
   sprintf( pathFolder, "%s", pszPathname );
  }
 }
}

// 사용할때
 char szDirectory[MAX_PATH];
 ZeroMemory( szDirectory, sizeof(szDirectory) );
 ChoiceDirectoryPath( szDirectory );
 if( strlen(szDirectory) <= 0 )
  return 0;

Posted by gsi
:

void CDlgProgPage::OnBnClickedBtnProgBackgroundload()
{
 // 이미지 로드 - 여기에 오픈 다이얼로그를 적용해야징.
 // 이미지가 로드 되고 나면 화면을 업데이트 한다.
 CFileDialog OpenDlg( TRUE, "Add Files", "*.*", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
  "Bitmap Files(*.*)|*.bmp|Jpeg Files(*.*)|*.jpg|PNG Files(*.*)|*.png|AVI Files(*.*)|*.avi|All Files(*.*)|*.*|" );

 if( OpenDlg.DoModal() == IDOK )
 {
  // 이미지 정보를 View로 보낸다.
  g_ProgView->SetBackgroundImage(GetImage(OpenDlg.GetPathName()));
  // 백그라운드 이미지가 있다면 체크박스 속성을 활성화 한다.
  CheckBackgroundImage();
 }
}

Posted by gsi
:


모니터링 툴 개발 코드를 싸그리 날렸네욤.. 덜덜덜..

사실 요놈으로 출퇴근 하면서 개발중이긴 한데..
이것도 하다 보니 키보드 치는게 느는군요.. 사람이란게 대단한건지...

그래도 이걸로 VS 2008, Blend 등등을 다 돌려 가면서 작은 화면에서
하다 보면 지하철에서 이상한 넘이라고 가끔 보는 사람들도 있더군요..
아마도 그 분들은 프로그램을 하신 분들일듯 합니다. ^^..

다시금.. 목표를 세우고.. 작업을 해야 될듯 합니다.
Posted by gsi
:


DB, Webservice, C#, WPF를 통합적으로 공부 하기 위해서.
현재 모니터링 툴을 하나 개발 중이다.

대충 이런 개념이다.

프로그램을 하다 보면 로그를 남겨야 하고,
그 로그로 인한 상태 정보를 파악하고자 할때가 많다.
그래서 그 로그 정보를 해당 DB로 저장하도록 한다.

웹 서비스를 통해서 해당 로그 정보를 DB로 저장하게 된다.

그리고 모니터링 툴은 현재 변경된 정보만을 DB에서 웹 서비스를 통해서
지속적으로 화면에 출력하게 된다.

출력되는 내용에 따라서 에러나 경고 메시지는 창을 통해서 새롭게 출력이 되게 된다.

대충 이런 개념이다.

현재 DB, 웹 서비스 부분은 완료 되었으며,
모니터링 툴의 UI 부분도 대충은 마무리가 되어 가고 있다.

심플하게 구성해 봤지만.
다양한 어플리케이션을 배울 수 있는 아주 좋은 프로젝트인듯 하다.

이후에 다양하게 응용할 부분은 해당 어플리케이션의 시스템 상태 정보를 볼수 있는 경우나,
IDC 센터의 서버를 이용해서 모니터링을 받게 되면, 유지 보수 및 원격지에서도
해당 어플리케이션의 정보를 탐색이 가능할듯 하다.

이후에는 프로그램의 노가다를 최대한 줄이기 위한 나만의 복사코드를 DB화 해서
원격지에서 해당 클립 보드로 전송하고, 그 내용을 바로 적용 가능하도록 하고
더 나아가면, 음성 인식 시스템을 도입해서, 해당 내용을 빠르게 검색하고
내용 전송을 통한 코드 적용을 극대화 하는 것도 연구중이다.

이 부분에서는 음성 인식 패턴을 다양하게 구축할 수 있는 서버가
관건인듯 하지만.. 아직은 자금이나, 아이디어가 많이 부족하기 때문에.
다양한 단위 테스트를 통한 학습을 우선 해야 할듯 하다.

우선 모니터링 툴에 대한 일부 내용들은 내가 WPF용으로 따로 만든 티스토리 페이지에서
지속적으로 업데이트할 생각이다.

WPF 관련된 내용은 여기 페이지가 많아지는 걸 없애기 위해서
그쪽에서 여러가지 테스트를 통한 내용들을 정리할 생각이다.

바쁘지만.. 요즘 같은 시기가 나에게는 다시금 오지 않을 30대 초반의
자유인듯 하다.
Posted by gsi
:

C# Deep Copy

C# 2008. 9. 24. 20:06 |


C#을 사용하다 보면 포인터의 개념이 없기 때문에 클래스인 경우는 참조 형태로 처리가 되는거 같아요.

A 의 클래스를 a, b로 선언하고 a의 값을 b로 대입하게 되면 참조 형태가 되어서 a의 값을 바꾸게 되면
결국에 b의 값도 바뀌게 되는 경우가 있습니다.

물론 데이터형인 경우는 깊은 복사가 이루어 지지만 클래스인 경우는 일반 복사가 이루어 지는듯 합니다.
간혹 깊은 복사를 해야 할때가 오는데요..

ICloneable을 상속 받아서 처리 하면 아래와 같이 처리 하면 될듯하네요.

// 샘플 코드
    class Cell : ICloneable
    {
        string var;

        public string Var
        {
            get { return var; }
            set { var = value; }
        }

        public Cell(string var)
        {
            this.Var = var;
        }

        public object Clone()
        {
            return new Cell(this.Var);
        }
    }

    class Cells : List<Cell>, ICloneable
    {
        public Cells()
        {
        }

        public object Clone()
        {
            Cells listCell = new Cells();
            foreach (Cell c in this)
            {
                listCell.Add((Cell)c.Clone());
            }

            return listCell;
        }
    }

Posted by gsi
: