블로그 이미지
따시쿵

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2015. 6. 25. 14:11 C# with LINQ to SQL

이번 글에서는 LINQ와 실제 데이타베이스(MS SQL 2012)를 연결해서 데이타를 조회하는 화면을 만들어 보겠습니다.

 

시나리오는 데이타베이스에 있는 테이블에서 사용자 아이디와 비밀번호를 비교해서 같은지 다른지를 풀력하는 프로그램 입니다.

 

먼저, 결과 화면부터 보겠습니다. 성공과 실패 두가지 입니다.

 

 

 

테이블 명세서와 테이타입니다.

 

 

 

우리는 프로그램을 공부하는 사람들이니 아래 박스의 순서에 따라 작업 해 주시면 됩니다.

 

1.  프로젝트 생성하고 dbml 파일 생성하기

 

Visual Studio 2013 을 실행 시킨 다음에, 프로젝트를 Windows form 타입으로 생성을 합니다.

프로젝트는 생성 한 후, [추가] => [새항목] =>[ 데이타] =>[LINQ to SQL 클래스] 선택하고 login.dbml 파일을 만듭니다. 파일을 만들고 나면, 왼쪽 오른쪽 분할 윈도우가 나오는데 왼쪽에는 테이블을 끌어다 놓고, 오른쪽에는 사용할 스토어프로시져를 끌어다 놓습니다.

 

login.dbml 파일을 만들었으면, DataContext() 클래스에서 상속받아서 loginDataContext() 을 자동적으로 만들어 줍니다. 이 파일은 logn.designer.cs 파일을 열면 확인이 가능합니다. tbl_member class 도 같이 자동으로 만들어 줍니다.

 

loginDataContext 클래스를 이용해서 테이타 쿼리가 이루어집니다.

 

 

 

2. 로그인 버튼에 click 이벤트를 추가 합니다.

LINQ 쿼리를 사용해서 디비 테이블의 필드값을 조회하는 쿼리는 유심히 확인하시기 바랍니다.

        private void btnLogin_Click(object sender, EventArgs e)
        {
            loginDataContext myDB = new loginDataContext();

            var userResult = from u in myDB.tbl_member
                             where u.user_name == this.textUserID.Text
                             && u.user_password == this.textUserPassword.Text
                             select u;

            if (Enumerable.Count(userResult) > 0)
                MessageBox.Show("로그인 성공", "로그인 확인", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else
                MessageBox.Show("로그인 실패", "로그인 확인", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

Enmerable.Count 는 쿼리가 실행되고 난 후, 결과 row 의 개수를 리턴해 줍니다.

 

 

3. SQL 문법 없이 사용하는 방법

2번에서 사용한 쿼리문을 다시 다음과 같이 IQueryable interface를 이용해서 다음과 같이 표현 할 수도 있습니다.

        private void btnLogin_Click(object sender, EventArgs e)
        {
            loginDataContext myDB = new loginDataContext();

            var userResult = myDB.tbl_member.Where(u => u.user_name == textUserID.Text 
                                                       && u.user_password == textUserPassword.Text);
            if (userResult.Count() > 0)
                MessageBox.Show("로그인 성공", "로그인 확인", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            else
                MessageBox.Show("로그인 실패", "로그인 확인", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

4. Single row 를 쿼리하기

로그인 화면에 [전화번호 쿼리하기] 버튼을 생성하고, 사용자 전화번호를 가져오는 퀴리를 만들어 봤습니다.

            loginDataContext myDB = new loginDataContext();

            try
            {
                tbl_member info = myDB.tbl_member.Single(u => u.user_name == textUserID.Text);
                MessageBox.Show(info.telephone);
            }
            catch(System.InvalidOperationException ex)
            {
                MessageBox.Show("사용자 입력이 잘못 되었습니다.");
            }

 

전제 소스

MyLINQ8.zip

 

posted by 따시쿵