package 는 이렇게 구성하였습니다.
싱글텀 패턴으로 DBINFO를 불러올 수 있도록 만들어준다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.ManagedDataAccess.Client;
namespace mdiproject.database
{
internal class DBINFO
{
public static string dbstr
= "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=xe)));User Id=usertodo;Password=1234;";
public static OracleConnection conn = null;
public static OracleConnection openConnect()
{
if (conn == null)
{
conn = new OracleConnection(dbstr);
conn.Open();
}
else
{
conn.Open();
}
return conn;
}
public static void closeConnect()
{
if (conn != null)
{
conn.Close();
conn.Dispose();
conn = null;
}
}
}
}
●UserForm.insert
private void button1_Click(object sender, EventArgs e)
{
Users users = new Users() {
Name = tb_name.Text,
Addr = tb_addr.Text,
Email = tb_email.Text,
Password = tb_password.Text
};
bool result = userDBMan.insert(users);
if (result)
{
MessageBox.Show("저장되었습니다.");
tb_addr.Text = "";
tb_email.Text = "";
tb_name.Text = "";
tb_password.Text = "";
LoadDate();
}
else
MessageBox.Show("저장에 실패하였습니다.");
}
bool result로 userDBMan에 있는 insert를 함수 호출한다.
●userDBMan 에 insert
public bool insert(Users users)
{
try
{
OracleConnection conn = DBINFO.openConnect();
string sql = "insert into users (idx ,email, addr, password, name) values (usersIdx.nextval,:email, :addr, :password, :name)";
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(":email", users.Email);
cmd.Parameters.Add(":addr", users.Addr);
cmd.Parameters.Add(":password", users.Password);
cmd.Parameters.Add(":name", users.Name);
cmd.ExecuteNonQuery();
DBINFO.closeConnect();
return true;
}catch (Exception e)
{
Console.WriteLine(e.StackTrace);
Console.WriteLine(e.Message);
return false;
}
}
try catch로 변수 허용 해준다.
oracle 데이터베이스에 userIdx를 허용해주기 위해
oracle 데이터베이스에
create SEQUENCE usersIdx
로 시퀀스를 만들어 준다
oracle를 자동 증가 키가 없기 때문에 시퀀스로 idx를 증가 시켜준다.
insert into users (idx) values (usersIdx.nextval)
이렇게 값을 넣어주면 1부터 시작하게 된다.
insert 할때 idx의 값을 usersIdx.nextval 로 증가 시켜준다.
public UserForm()
{
InitializeComponent();
LoadDate();
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}
LoadDate();로 함수 호출 해주고
●UserForm.LoadDate
private void LoadDate()
{
// 화면 변경해라
DataTable dt = userDBMan.select();
if (dt != null )
{
dataGridView1.DataSource = dt;
}
}
userDBMan에 있는 select 함수를 호출한다.
●userDBMan.select
public DataTable select()
{
try
{
DBINFO.openConnect();
string sql = "select * from users";
OracleDataAdapter adapter = new OracleDataAdapter();
DataSet ds = new DataSet();
OracleCommand oracleCommand = new OracleCommand(sql, DBINFO.conn);
adapter.SelectCommand = oracleCommand;
adapter.Fill(ds);
DBINFO.closeConnect();
return ds.Tables[0];
}
catch (Exception e)
{
MessageBox.Show(e.StackTrace);
MessageBox.Show(e.Message);
return null;
}
}
sql 구문으로 값을 넣어주고
실행이 되면 0번째를 출력해라
'C#' 카테고리의 다른 글
C# 할일 관리 프로그램(4) 할일관리(select) (0) | 2024.03.05 |
---|---|
C# 할일 관리 프로그램(3) 할일관리(insert) (0) | 2024.03.04 |
c# 할일 관리 프로그램(1) (0) | 2024.02.27 |
C# crud(create, read(select), update, delete) 2 (0) | 2024.02.26 |
C# crud(create, read(select), update, delete) (0) | 2024.02.23 |