C#에서 postgresql을 연동하는 방법입니다. npgsql을 사용하면 되고 ADO.NET과 완벽하게 호환되는 것을 목표로 개발이 되어서 .NET의 데이터베이스 처리하는 부분 거의 동일하게 구현을 하면됩니다.
1. npgsql설치
- Nuget을 이용하여 Npgsql 7.0.4버전을 설치합니다. 설치명령어 : Install-Package Npgsql -Version 7.0.4
2. DB연결 및 데이터 저장,조회
ADO.NET과 동일한 클래스형태로 제공하기 때문에 어렵지 않게 구현이 가능합니다. 클래스명도 앞에 npg항목이 붙었고 나머지는 SqlClient를 사용할때와 동일합니다.
항목 | 설명 |
NpgsqlConnection | posetgresql 데이터베이스에 대한 연결 |
NpgsqlCommand | 데이터베이스에 대해 실행할 SQL문이나 저장 프로시저 |
NpgsqlDataReader | 데이터베이스에서 행의 앞으로만 이동 가능한 스트림을 읽을 수 있게 |
NpgsqlDataAdapter | 데이터를 클라이언트에 가져오고 DataSet에 할당 후 연결을 끊고 사용 |
소스코드를 한번 보면 이해가 쉽게 될겁니다. PostgresqlLib라는 클래스를 생성합니다. ADO.NET사용하는법과 동일합니다. Connection개체로 DB를 연결하고 Command개체로 SQL문을 입력하여 데이터를 읽고,쓰기를 합니다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using Npgsql;
namespace PostgresqlInferface
{
class PostgresqlLib
{
// 접속테스트
public bool ConnectionTest()
{
string connectString = string.Format("Host={0};Database={1};Username ={2};Password={3};", "127.0.0.1",
"TESTDB", "test", "1234!");
try
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectString))
{
conn.Open();
}
return true;
}
catch (Exception)
{
return false;
}
}
//데이터조회
public void SelectDB()
{
string connectString = string.Format("Host={0};Database={1};Username ={2};Password={3};", "127.0.0.1",
"TESTDB", "test", "1234!");
string sql = "select * from UserInfo";
using (NpgsqlConnection conn = new NpgsqlConnection(connectString))
{
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
NpgsqlDataReader dr = cmd.ExecuteReader();
dr.Close();
}
}
//INSERT처리
public void InsertDB(int id, string name)
{
string connectString = string.Format("Host={0};Database={1};Username ={2};Password={3};", "127.0.0.1",
"TESTDB", "test", "1234!");
string sql = $"Insert Into UserInfo (id,name) values ({id},'{name}')";
using (NpgsqlConnection conn = new NpgsqlConnection(connectString))
{
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
}
//데이터조회
public DataSet GetUserInfo()
{
string connectString = string.Format("Host={0};Database={1};Username ={2};Password={3};", "127.0.0.1",
"TESTDB", "test", "1234!");
string sql = "select * from UserInfo";
DataSet ds = new DataSet();
using (NpgsqlConnection conn = new NpgsqlConnection(connectString))
{
conn.Open();
NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
da.TableMappings.Add("UserInfo","1");
da.Fill(ds);
}
return ds;
}
}
}
|
cs |
윈도우폼 Form1.cs파일을 만듭니다. 테이블을 조회하는 btnSearch버튼과 계정을 추가를 위한 txtId,txtName텍스트박스와 btnAdd버튼을 추가합니다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PostgresqlInferface
{
public partial class Form1 : Form
{
PostgresqlLib postgresqlLib;
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
postgresqlLib = new PostgresqlLib();
}
private void btnAdd_Click(object sender, EventArgs e)
{
postgresqlLib.InsertDB(int.Parse(txtID.Text), txtName.Text);
}
private void btnSearch_Click(object sender, EventArgs e)
{
DataSet ds = postgresqlLib.GetUserInfo();
if (ds.Tables.Count > 0)
{
dataGridView1.DataSource = ds.Tables[0];
}
}
}
}
|
cs |
프로그램을 실행 후 테스트를 해보면 id,name에 값을 입력후 추가하면 UserInfo테이블에 데이터가 저장되고, 조회버튼을 클릭하면 데이터를 가져와 Grid에 표출되는 부분을 확인 할 수 있습니다.
3. Npgsql 상세내용
보다상세한 내용은 아래 npgsql 문서를 참고하면됩니다. https://www.npgsql.org/doc/index.html
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 폼사이즈 수정안될때 (0) | 2024.01.06 |
---|---|
[C#] Sleep을 이용하여 CPU부하줄이기, Sleep(0)의미 (0) | 2023.07.18 |
[C#] 네이버센스 SMS문자보내기 (0) | 2023.02.14 |
[C#] 설치파일 만들기 (0) | 2023.01.16 |
[C#] 파일 전체 읽기 (File.ReadAllText) (0) | 2023.01.09 |