컴퓨터/C#

[C#/ PostgreSQL] AWS RDS(PostgreSQL) 접속하기 및 쿼리

dolhim 2016. 6. 30. 15:47


Npgsql (NetPostGreSQL)

- PostgreSQL의 데이터를 제공하는 라이브러리

- .NET Framework로 개발되는 어떤 프로그램이던 PostgreSQL에 접근하는 것을 허용

- 100% 순수 C#으로 개발되었음

- PostgreSQL 9.0 버전부터 공식적으로 지원함

- 최신 버전은 3.1.5(stable)임 (.NET4.5 기준 / .NET4.0은 버전 2.2.7을 사용해야함)

- 라이센스는 PostgreSQL License를 따름 (수정 후 배포 조건이 없고 자유로움)




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// AWS RDS 계정을 이용하여 PostgreSQL 연결
public string Connect(AWSCredentials credentials)
{
    var rdsClient = new AmazonRDSClient(credentials, RegionEndpoint.APNortheast2);
    try  {
        DescribeDBInstancesResponse response = rdsClient.DescribeDBInstances();
        if (response.DBInstances.Count > 0)
        {
             StringBuilder connStr = new StringBuilder();
            connStr.AppendFormat("Server={0};User Id={1};Password=rjsrnreohlm;Database={2};",
                response.DBInstances[0].Endpoint.Address,
                response.DBInstances[0].MasterUsername,
            response.DBInstances[0].DBName);
            conn = new NpgsqlConnection(connStr.ToString());
        conn.Open();
            if (conn.State == ConnectionState.Open)
                 conn.Close();
        }
    } catch (Exception) { throw; }
}
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// json을 이용하여 PostgreSQL insert into 쿼리 전송
public int Query(JObject _json)
{
    string dbName = "dbname"
    int flag = -9999;
    try {
        if (conn == nullreturn -1;
        if (conn.State != ConnectionState.Open)
            conn.Open();
 
        using (NpgsqlCommand sql = conn.CreateCommand())  {
            var baseInfo = _json.ToObject<SimpleData>();
            sql.CommandType = CommandType.Text
            sql.CommandText = "insert into "+ dbName +" (dataname, timestamp)" +
                              " values (@dataname, @timestamp)"
            sql.Parameters.Add("dataname", NpgsqlDbType.Text).Value = baseInfo.Name
            sql.Parameters.Add("timestamp", NpgsqlDbType.TimestampTZ).Value = baseInfo.TimeStamp
            flag = sql.ExecuteNonQuery();
        }
        return flag;
    }  catch (Exception) {  throw;  }
    return 0;
}
cs