NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# Postgres 데이타베이스 연동하기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 데이타베이스 연동은 대부분 Back-end에서 처리하는데요. Back-end 프로그래밍은 Java를 사용합니다. 이번에 서버 구축은 특이하게 C#을 이용하게 되었습니다. 그래서, C#으로 Postgres 데이타베이스에 연결해서 데이타를 가져오는 방법을 알아보도록 하겠습니다. 우선, Visual Studio를 실행하고, 새로운 프로젝트를 하나 만듭니다. 제 경우에는 MSPC라는 프로젝트를 만들었습니다.

    ※ Consumer, Producer는 ActiveMQ 프로젝트입니다. C#에서 ActiveMQ에 대한 사용방법은 [ 여기 ]를 참고하세요.

    CdxBsSc.png

     

     

    Postgres 데이타베이스에 연결하려면 Npgsql 패키지를 설치해야 합니다. Visual Studio의 메뉴에서 도구 > NuGet 패키지 관리자 > 솔루션용 NuGet 패키지 관리를 선택하세요.

    yxK8NPa.png

     

     

    아래 그림을 참고해서 MSPC 프로젝트에 패키지를 설치하세요.

    1. 검색창에 "postgres"를 입력
    2. Npgsql 선택
    3. MSPC 프로젝트 체크 (자신의 프로젝트 체크)
    4. 설치 버튼 클릭

    tkoiuIl.png

     

     

    데이타베이스에 연결하기 위한 문자열을 아래와 같이 만듭니다. 각 항목은 자신의 환경에 맞게 수정해주세요.

    // POSTGRES 데이타베이스 연결
    string connString = "HOST=DB_SERVER_IP;PORT=5432;USERNAME=postgres;PASSWORD=PASSWORD;DATABASE=postgres";

     

    데이타베이스를 핸들링할때는 개체에 대해 Close 또는 Dispose를 통해 메모리에서 해제해주는게 중요합니다. 대부분 Close를 통해서 연결을 닫아줍니다. 하지만, 이렇게 처리하는건 휴먼 에러를 발생시킬 위험이 높습니다. 실수로 Close 메소드를 호출하지 않거나 모르고 건너뛸 수 있는 부분이니까요. 그래서, 가능하면 프레임워크나 별도로 랩핑된 클래스를 제공하는게 좋은 방법입니다. 이 글은 간단한 테스트이므로 프레임워크를 만들거나 하지는 않았습니다. 그리고, 한번 사용한 개체들은 전부 메모리에서 해제하기 위해 using을 사용했습니다. 아래는 커넥션을 생성하는 코드입니다. using을 사용하고 있습니다.

    using (var conn = new NpgsqlConnection(connString))
    {

     

    에러에 유연하게 대처하기 위해서 try ~ catch ~ finally 블록으로 감싸줍니다.

    try
    {
        conn.Open();

     

    위에서 연결한 데이타베이스에 CRUD를 실행할 커멘드를 하나 생성해줍니다. 커멘드도 using 블록으로 감싸줍니다.

    using (var command = new NpgsqlCommand())
    {

     

    커멘드가 실행될 데이타베이스 커넥션을 설정하고, 쿼리(질의)문을 CommandText에 넣어줍니다. 커멘드에서 ExecuteReader 메소드를 호출하면 결과를 받아올 수 있습니다.

    command.Connection = conn;
    command.CommandText = "SELECT * FROM TABLE_NAME";
    
    using (var reader = command.ExecuteReader())
    {

     

    아래 코드에서 index는 쿼리해온 Row의 행 인덱스를 출력하기 위한 맴버 변수입니다. NpgsqlDataReader(reader)의 스트림 끝에 도달하면 while문을 탈출하게 됩니다. 그래서, 아래와 같이 코드를 작성하면 모든 데이타를 출력해볼 수 있습니다.

    int index = 0;
    
    while (reader.Read())
    {
        var Data = new String[]
        {
            reader["ID"]?.ToString(),
            reader["PW"]?.ToString(),
            reader["NAME"]?.ToString()
        };
    
        Console.WriteLine($"Index: {index}, {String.Join(Environment.NewLine, Data)}");
        index++;
    }

     

    전체 코드는 아래와 같습니다.

    // POSTGRES 데이타베이스 연결
    string connString = "HOST=192.168.99.105;PORT=5432;USERNAME=postgres;PASSWORD=bistel01;DATABASE=postgres";
    
    using (var conn = new NpgsqlConnection(connString))
    {
        try
        {
            conn.Open();
    
            //DB SELECT 구문
            using (var command = new NpgsqlCommand())
            {
                command.Connection = conn;
                command.CommandText = "SELECT * FROM TABLE_NAME";
    
                using (var reader = command.ExecuteReader())
                {
                    int index = 0;
    
                    while (reader.Read())
                    {
                        var Data = new String[]
                        {
                            reader["ID"]?.ToString(),
                            reader["PW"]?.ToString(),
                            reader["NAME"]?.ToString()
                        };
    
                        Console.WriteLine($"Index: {index}, {String.Join(Environment.NewLine, Data)}");
                        index++;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

     

    간단하게 C#에서 Postgres 데이타베이스에 연결해서 쿼리해오는 방법에 대해 알아봤습니다. MySQL이나 MSSQL 또는 Oracle과 사용 방법이 크게 다르지 않습니다. 관계형 데이타베이스를 다뤄본 경험이 있다면 어렵지 않게 테스트할 수 있을겁니다. CommandType이나 Parameter도 동일하게 사용할 수 있습니다. 물론, Transaction 방법도 동일합니다. 엔지엠 에디터의 데이타베이스 관련 액션들도 동일한 인터페이스를 가집니다. 이렇게 전부 동일한 형식을 띄는 이유는 이 클래스가 System.Data 어셈블리의 DbCommand 추상 클래스를 구현하고 있기 때문입니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.