Firebase.cs

Seungbin Yang / 양승빈·2024년 5월 8일

비주얼프로그래밍

목록 보기
16/21

NuGet Package를 추가해주어야 한다. FireSharp를 설치한다.

using FireSharp.Config;
using FireSharp.Interfaces;
using FireSharp.Response;

설치한 FireSharp를 사용하기 위해 using문을 적어준다.

namespace VP02_FB
{
    public partial class Form1 : Form
    {
        IFirebaseConfig config = new FirebaseConfig
        {
            AuthSecret = "API 키",
            BasePath = "파이어베이스 주소",
        };

        IFirebaseClient client;

        public Form1()
        {
            InitializeComponent();
        }

구글 파이어베이스에 접속해서 Realtime 데이터베이스를 생성하고,
AuthSecret과 BasePath에 API 키, 파이어베이스 주소를 입력해준다.

 private void Form1_Load(object sender, EventArgs e)
 {
     client = new FireSharp.FirebaseClient(config);
     if(client != null)
     {
         MessageBox.Show("Connection 성공");
     }
 }

client 값을 정상적으로 불러오면 메시지 박스를 출력한다.

private async void btnInsert_Click(object sender, EventArgs e)
{
    var data = new Data
    {
        Id = txtID.Text,
        SId = txtSId.Text,
        Name = txtname.Text,
        Phone = txtphone.Text
    };
    SetResponse response = await client.SetAsync("Phonebook/" + txtID.Text, data);
    Data result = response.ResultAs<Data>();

    MessageBox.Show("Data Inserted : ID = " + result.Id);
}

ID, 학번, 이름, 전화번호 등 변수를 선언한다.

namespace VP02_FB
{
    internal class Data
    {
        public string Id { get; set; }
        public string SId { get; set; }
        public string Name { get; set; }
        public string Phone { get; set; }
    }
}

4개의 변수의 값을 불러올 수도 있고 지정해줄 수도 있다.

private void btnClear_Click(object sender, EventArgs e)
{
     txtID.Text = "";
     txtSId.Text = "";
     txtname.Text = "";
     txtphone.Text = "";
}

클리어 버튼을 클릭하면 4개의 변수를 빈칸으로 만든다.

 private async void btnRetrieve_Click(object sender, EventArgs e)
{
    FirebaseResponse response 
     = await client.GetAsync("Phonebook/" + txtID.Text);
      Data obj = response.ResultAs<Data>();

    txtID.Text = obj.Id;
    txtname.Text = obj.Name;
    txtphone.Text= obj.Phone;
    txtSId.Text= obj.SId;

    MessageBox.Show("Data retrieved successfully!");
}

ID를 입력하고 Retrieve 버튼을 누르면 해당 ID의 정보를 불러온다.

private async void btnUpdate_Click(object sender, EventArgs e)
{
 var data = new Data
{
  Id = txtID.Text,
  SId = txtSId.Text,
  Name = txtname.Text,
  Phone = txtphone.Text
};

FirebaseResponse response = await client.UpdateAsync("Phonebook/"+txtID.Text, data);
Data result = response.ResultAs<Data>();
MessageBox.Show("Data updated successfully! =" + result.Id);
}

Update 버튼을 누르면 텍스트 박스에 입력한 값으로 수정하도록 해준다.
메세지 박스를 통해 제대로 업데이트 되었는지 확인한다.

private async void btnDelete_Click(object sender, EventArgs e)
{
    FirebaseResponse response = await client.DeleteAsync("Phonebook/" + txtID.Text);
    MessageBox.Show("Deleted! : id = " + txtID.Text);

    dt.Rows.Clear();
    export();
}

삭제 기능을 하는 버튼 클릭 함수다.

private async void btnDeleteAll_Click(object sender, EventArgs e)
{
    DialogResult answer = MessageBox.Show("저장된 모든 데이터가 삭제됩니다. 계속할까요?", "경고!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

    if (answer == DialogResult.No)
        return;

    // cnt를 0으로 초기화
    var obj = new Counter { cnt = 0 };
    SetResponse resp = await client.SetAsync("Counter/", obj);
    FirebaseResponse response = await client.DeleteAsync("Phonebook");
    MessageBox.Show("All data at Phonebook/ Deleted! ");
    dt.Rows.Clear();
    export();
}

모두 삭제 기능을 하는 버튼 클릭 함수다.

private void btnExit_Click(object sender, EventArgs e)
   {
       this.Close();
   }

종료 기능을 하는 버튼 함수이다.

private async void btnInsert_Click(object sender, EventArgs e)
{
    FirebaseResponse resp = await client.GetAsync("Counter/");
    Counter c = resp.ResultAs<Counter>();
   
    var data = new Data
    {
        Id = (c.cnt + 1).ToString(),
        SId = txtSId.Text,
        Name = txtname.Text,
        Phone = txtphone.Text
    };
    SetResponse response = await client.SetAsync("Phonebook/" + data.Id, data);
    Data result = response.ResultAs<Data>();

    MessageBox.Show("Data Inserted : ID = " + result.Id);

    var obj = new Counter
    {
        cnt = c.cnt + 1
    };
    SetResponse response1 = await client.SetAsync("Counter/", obj);

    dt.Rows.Clear();
    export();
}

Insert 버튼을 눌렀을 때, Counter를 읽어오도록 해준다.

public partial class Form1 : Form
   {
       DataTable dt = new DataTable();
  
   private void Form1_Load(object sender, EventArgs e)
  {
      client = new FireSharp.FirebaseClient(config);
      if(client != null)
      {
          MessageBox.Show("Connection 성공");
      }
      dt.Columns.Add("Id");
      dt.Columns.Add("학번");
      dt.Columns.Add("이름");
      dt.Columns.Add("전화번호");

      dataGridView1.DataSource = dt;

      dt.Rows.Clear();
      export();
  }
  
private void btnViewAll_Click(object sender, EventArgs e)
{
     dt.Rows.Clear();
     export();
}

private async void export()
  {
      int i = 0;
      FirebaseResponse response = await client.GetAsync("Counter/");
      Counter obj = response.ResultAs<Counter>();
      int cnt = obj.cnt;

      while(i != cnt)
      {
          i++;
          FirebaseResponse resp = await client.GetAsync("Phonebook/" + i);
          Data d = resp.ResultAs<Data>();

          if(d != null)
          {
              DataRow row = dt.NewRow();
              row["Id"] = d.Id;
              row["학번"] = d.SId;
              row["이름"] = d.Name;
              row["전화번호"] = d.Phone;
              dt.Rows.Add(row);

          }
      }
  }
  
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
            DataGridView dgv = (DataGridView)sender;
            txtID.Text = dgv.Rows[e.RowIndex].Cells[0].Value.ToString();
            txtSId.Text = dgv.Rows[e.RowIndex].Cells[1].Value.ToString();
            txtname.Text = dgv.Rows[e.RowIndex].Cells[2].Value.ToString();
            txtphone.Text = dgv.Rows[e.RowIndex].Cells[3].Value.ToString();
}

결과

0개의 댓글