August 7, 2009

ACCESS and LINQ

안녕하세요^^

최근 아르바이트로 프로젝트를 진행하던 도중 Access Database 를 사용하게 되었는데 기존 작업은 상당히 노가다성이 강해 .Net 의 Linq 를 통해 좀더 쉽게 Database 에 접근해보고 싶어서 시작하게 되었습니다.우선 작업환경은 .Net Framework 3.5 이상이며 Microsoft Office Access 2007 을 사용하였습니다.

 

우선 테스트를 위해 accdb 파일이 하나 필요 합니다. 아래와 같이 필드명속성을 지정해줍니다.

 

이렇게 accdb 파일을 하나 만들게 됩니다. (player.accdb)

이제는 프로그램을 통해 이 Database 를 가지고 놀아야 할때입니다.^^

 

이제 '콘솔 응용 프로그램'을 하나 생성하게 됩니다.(윈폼등 아무거나 가능)

생성후 참조 추가를 통해 .Net 탭에서 System.Data.Linq 를 추가하고 아래와 같이 추가해주면 됩니다.

using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Data.OleDb;

 

다음으로, 이번 스텁에서 중요한 부분인 클래스를 하나 추가해주는 부분입니다.

[Table(Name = "Player")]
public class Players
{
    [Column(IsPrimaryKey = true, Name = "name")]
     public string name { get; set; }

    [Column(Name = "age")]
     public int age { get; set; }
}

Table(Name="Player") 부분에서 Name 은 실제 accdb 에서 테이블 명을 말하는것이며 각 필드의 명도 소스와 같이 정확하게 적어주면 됩니다. 이부분에서 실수가 발생하게 되면 작동이 안될 수 도 있습니다. 보통 오류가 이부분을 정화하게 정해주지 않으면 발생하는것 같습니다.

 

다음은 accdb 에 있는 내용을 출력해보는 소스를 작성해 보겠습니다.

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\player.accdb");
DataContext dc = new DataContext(con);

Table tst = dc.GetTable();
            
var result = from w in tst select w;

foreach (Players stu in result)
{
    Console.WriteLine("{0} {1}", stu.name, stu.age);
}

첫줄의 Provider=Microsoft.ACE.OLEDB.12.0; 이부분은 Office 2007 을 사용하기 때문에 다음과 같이설정해주었습니다.

 

이제 출력까지 해보았으니 삽입을 해보겠습니다. 삽입은 더욱더 간단하더군요.

Players one = new Players();
one.name = "KOREA";
one.age = 100;
            
tst.InsertOnSubmit(one);
dc.SubmitChanges();

 

 

 

이상으로 LINQ 를 통하여 Access Database (accdb) 출력, 삽입을 마치겠습니다.^^

사실 하면서도 제대로 한건지 의문이 드네요ㅎ

 

앗!! 꼭 참고해야할 사항이 있습니다. 32비트 컴퓨터에선 모르겠지만 제가 사용하는 환경은 64비트 컴퓨터 이여서 처음에 오류때문에 고생을 했었습니다.

64비트 환경에서는 프로젝트 속성에서 플랫폼 대상을 Any CPU 에서 x86 으로 바꿔주셔야합니다.

 

2 comments:

  1. 오호! 이것을 올려 놓았군요 ㅎㅎ 공짜로 배워갑니다. 제 나이 25로 고쳐주세요~ 전 DK님처럼 늙지 않았어요ㅡ,.ㅡ

    ReplyDelete
  2. @맨날맑음 - 2009/08/08 00:52
    나보다 늙어보이면서...ㅋㄷ

    님을 위해 포스팅 한거임...ㅋㄷ

    ReplyDelete