본문 바로가기
C#

C# 할일 관리 프로그램(2) 사용자관리(insert/select)

by improve 2024. 2. 28.

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번째를 출력해라