ACCESS and LINQ

.Net/LINQ 2009. 8. 7. 01:01

안녕하세요^^

최근 아르바이트로 프로젝트를 진행하던 도중 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 으로 바꿔주셔야합니다.

 

Posted by Dongkyu
,