*잘못된 점이나, 이해가 안되는 부분 찝어주시면 정중히 감사합니다.
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. 종료할때 쓰레드와 딜레이타임을 정지시키고, 데이터베이스와 연결을 끊는다.
끗