2017년 1월 23일 월요일

[C#] .Net Winform with FireBird and FlameRobin (Feat.Thread and Timer)

*허접한 프로그램입니다. 공부겸 해서 만든것이니, 실무에서는 이렇게 만드시지 않는걸 권장합니다.

*잘못된 점이나, 이해가 안되는 부분 찝어주시면 정중히 감사합니다.

C# 윈폼과 Firebird를 연동하던중 리스트뷰가 자동으로 갱신되었음 좋겠다.생각해서 시작한건데.... 오랫만에 닷넷을 만지려니 이것저것 어려움이 있었다...
그래도 그나마 원하는 기능을 구현 할 수 있어서 좋았던것 같다.



애쓴것 보다 허접한 데이터 관리 프로그램이다...

코드를 보자
using System;
using System.Data;
using System.Threading;
using System.Windows.Forms;
using FirebirdSql.Data.FirebirdClient;

namespace DB_TEST
{
    public partial class Form1 : Form
    {
        FbConnectionStringBuilder fdb = new FbConnectionStringBuilder();
        FbConnection connection;
        FbCommand cmd;

        ThreadStart ts;
        Thread reFresh;

        private static System.Timers.Timer atimer;
        
        public string connectionString = "";
        public int ID_Count = 0;
        public Form1()
        {
            InitializeComponent();
            DB_Conected();

            atimer = new System.Timers.Timer();
            atimer.Interval = 10000;
            atimer.Elapsed += DelayTime;
            atimer.AutoReset = true;
            atimer.Enabled = true;
        }

        public void Thread_Refresh()
        {
            try
            {
                this.Invoke(new MethodInvoker(delegate ()
                {
                    string strSql = "SELECT * from IDCARDTABLE";
                    cmd = new FbCommand(strSql, connection);
                    cmd.CommandType = CommandType.Text;
                    FbDataReader reader = cmd.ExecuteReader();

                    listView1.Items.Clear();
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            ListViewItem LV_item = new ListViewItem(reader.GetString(0));
                            LV_item.SubItems.Add(reader.GetString(1));
                            LV_item.SubItems.Add(reader.GetString(2));
                            LV_item.SubItems.Add(reader.GetString(3));
                            listView1.Items.Add(LV_item);
                            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
                            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
                        }
                    }
                }));
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.ToString());
            }
        }
        //딜레이함수
        private void DelayTime(object myObject, System.Timers.ElapsedEventArgs myEventArgs)
        {
            //스레드
            ts = new ThreadStart(Thread_Refresh);
            reFresh = new Thread(ts);
            reFresh.IsBackground = true;
            reFresh.Start();
        }
        private void DB_Conected()
        {
            try
            {
                fdb.DataSource = "127.0.0.1";
                fdb.Port = 3050;
                fdb.Database = @"C:\Users\JHY\Documents\Visual Studio 2015\Projects\DB_TEST\DB_TEST\DB.fdb";
                fdb.ServerType = FbServerType.Default;
                fdb.UserID = "SYSDBA";
                fdb.Password = "masterkey";
                fdb.Dialect = 3;
                connectionString = fdb.ToString();
                connection = new FbConnection(connectionString);
                connection.Open();
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.ToString());
            }
        }
        private void Input_Data_Click(object sender, EventArgs e)
        {
            try
            {
                DateTime da = new DateTime();
                string strSql = "INSERT INTO IDCARDTABLE(ID_NUMBER, NAME, ADDRESS, LOGDATE) VALUES(@ID_NUMBER, @NAME, @ADDRESS, @LOGDATE)";
                cmd = new FbCommand(strSql, connection);
                cmd.Parameters.Add("@NAME", textBox1.Text);
                cmd.Parameters.Add("@ADDRESS", textBox2.Text);
                cmd.Parameters.AddWithValue("@ID_NUMBER", ID_Count++);
                cmd.Parameters.Add("@LOGDATE", da = DateTime.Now.Date);
                cmd.ExecuteNonQuery();
                //connection.Close();
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message.ToString());
            }
        }

        //private void DB_ListView()
        //{
        //    string strSql = "SELECT * from IDCARDTABLE";
        //    cmd = new FbCommand(strSql, connection);
        //    cmd.CommandType = CommandType.Text;
        //    FbDataReader reader = cmd.ExecuteReader();
            
        //    listView1.Items.Clear();
        //    if (reader.HasRows)
        //    {
        //        while (reader.Read())
        //        {
        //            ListViewItem LV_item = new ListViewItem(reader.GetString(0));
        //            LV_item.SubItems.Add(reader.GetString(1));
        //            LV_item.SubItems.Add(reader.GetString(2));
        //            LV_item.SubItems.Add(reader.GetString(3));
        //            listView1.Items.Add(LV_item);
        //            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
        //            //listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        //        }
        //    }
        //}
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            try
            {
                //디비가 열려있다면 닫고 종료
                if (connection.State == ConnectionState.Open)
                {
                    atimer.Enabled = false;
                    reFresh.Join();
                    connection.Close();
                }
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.ToString());
            }
        }

        private void Delete_Data_Click(object sender, EventArgs e)
        {
            try
            {
                string strSql = "DELETE from IDCARDTABLE WHERE NAME = @NAME and ADDRESS = @ADDRESS";
                cmd = new FbCommand(strSql, connection);
                cmd.CommandType = CommandType.Text;

                cmd.Parameters.Add("@NAME", textBox3.Text);
                cmd.Parameters.Add("@ADDRESS", textBox4.Text);
                //cmd.Parameters["@NAME"].Value = listView1.SelectedItems[1].Text;
                cmd.ExecuteNonQuery();
            }
            catch(Exception ee)
            {
                MessageBox.Show(ee.ToString());
            }
        }
    }
}

1. 폼을 로드한다.
1.1 디비를 연결하는 함수를 호출한다.
1.2. 딜레이 타임함수를 호출한다.
2.(쓰레드)안 리스트뷰에 뿌려주는 기능을 호출한다.
2.1 10초마다 뿌려준다.
3. 인풋버튼을 누르면 데이터베이스에 데이터를 넣는다.
4. 딜리트버튼을 누르면 데이터베이스에있는 데이터를 삭제한다.
5. 종료할때 쓰레드와 딜레이타임을 정지시키고, 데이터베이스와 연결을 끊는다.
 끗

2017년 1월 17일 화요일

[C#] .Net Winform 애니메이션 연동(간단한 게임만들기)


회사 업무시간에 간단히 윈폼으로 아무거나 만들라고 지시가 내려와서
그냥 닷넷으로 횡스크롤 슈팅게임이나 만들려고 했다가....
메탈슬러그 캐릭터가 넘나 귀여워서 동영상을 찍었다 ㅋㅋㅋ