- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[VB.NET] CRUD Thêm xóa sửa tìm kiếm Realtime FireBase
Xin chào các bạn, bài viết hôm nay mình xin chia sẽ đến các bạn Source code thêm, xóa, sửa, tìm kiếm CRUD với Realtime Database (Firebase) bằng ngôn ngữ VB.NET Winform.
[VB.NET] CRUD REALTIME DATABASE FIREBASE
Trong bài viết trước, mình đã có chia sẽ bài viết này nhưng bằng ngôn ngữ C#.
Trong bài viết này, mình có source code của tác giả Project AM, mình chia sẽ đến các bạn nào cần thao tác với Firebase bằng ngôn ngữ VB.NET.
Dưới đây là giao diện demo ứng dụng:
Để lưu trữ hình ảnh lên Database Firebase, chúng ta sẽ mã hóa hình ảnh sang dạng BASE64 để lưu trữ chúng.
Full source code CRUD Firebase VB.NET
Imports FireSharp.Config
Imports FireSharp.Response
Imports FireSharp.Interfaces
Imports System.Web.Script.Serialization '(Importing System.Web.Script.Serialization) This is used to read and convert JSON strings.
Imports System.ComponentModel '(Importing System.ComponentModel) This is used to sort data on DataGridView.
Imports System.IO '(Importing System.IO) This is used for ImageToBase64 Public Functions and Base64ToImage Public Functions.
Public Class Form1
Dim IMG_FileNameInput As String 'This variable is used to hold the address and file name of the image that will be displayed in the registration section.
Dim clearDGVCol As Boolean = True
Private dtTableGrd As DataTable 'This variable is used to search data on DataGridView.
'-------------------------------------------Configure FireSharp
Private fcon As New FirebaseConfig() With
{
.AuthSecret = "afojSxW25t6PgEl98qmLSanufOI3jKkGG552XaoW",
.BasePath = "https://laptrinhvb-c96be.firebaseio.com/"
}
Private client As IFirebaseClient
'-------------------------------------------
Public Function ImageToBase64(image As Image) As String
Using ms As New MemoryStream()
' Convert Image to byte[]
Dim Format As System.Drawing.Imaging.ImageFormat = Imaging.ImageFormat.Jpeg
image.Save(ms, Format)
Dim imageBytes As Byte() = ms.ToArray()
' Convert byte[] to Base64 String
Dim base64String As String = Convert.ToBase64String(imageBytes)
Return base64String
End Using
End Function
Public Function Base64ToImage(base64String As String) As Image
' Convert Base64 String to byte[]
Dim imageBytes As Byte() = Convert.FromBase64String(base64String)
Dim ms As New MemoryStream(imageBytes, 0, imageBytes.Length)
' Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length)
Dim image__1 As Image = System.Drawing.Image.FromStream(ms, True)
Return image__1
End Function
'-------------------------------------------
Sub DisplayRegSave(Stat As Boolean)
TBName.Enabled = Stat
TBID.Enabled = Stat
CBGender.Enabled = Stat
CBGender.Enabled = Stat
BtnSave.Enabled = Stat
BtnClearAll.Enabled = Stat
End Sub
Sub DisplayRecLoad(Stat As Boolean)
TBSearch.Enabled = Stat
CBSearchBy.Enabled = Stat
BtnEdit.Enabled = Stat
BtnDelete.Enabled = Stat
BtnRefresh.Enabled = Stat
BtnClearSelection.Enabled = Stat
DGVUserData.Enabled = Stat
End Sub
'-------------------------------------------
'-------------------------------------------Sub to load data from database and display in DataGridView.
Sub ShowRecord()
Try
Dim dtTable As New DataTable
dtTable.Columns.Add("Name")
dtTable.Columns.Add("ID")
dtTable.Columns.Add("Gender")
dtTable.Columns.Add("City")
dtTable.Columns.Add("Image", GetType(Image))
'-------------------------------------------Conditions for deleting columns. This was executed only once.
If clearDGVCol = True Then
DGVUserData.Columns.Clear()
clearDGVCol = False
End If
'-------------------------------------------
Dim SRRecord = client.Get("PersonDB/") 'To load and hold Database in JSON file format.
'-------------------------------------------To converts the specified JSON string to an object of type T.
'-------------------------------------------For more information see here :
'-------------------------------------------https://docs.microsoft.com/en-us/dotnet/api/system.web.script.serialization.javascriptserializer.deserialize?view=netframework-4.8
Dim myJsonTool As New JavaScriptSerializer
Dim myDeserializedItems = myJsonTool.Deserialize(Of Dictionary(Of String, PersonalData))(SRRecord.Body)
'-------------------------------------------
'-------------------------------------------To enter a Database (in JSON file format that has been previously converted into an object form) into a Table.
For Each dictItem As KeyValuePair(Of String, PersonalData) In myDeserializedItems
dtTable.Rows.Add(dictItem.Value.Name,
dictItem.Value.ID,
dictItem.Value.Gender,
dictItem.Value.City,
Base64ToImage(dictItem.Value.Image))
Next
'-------------------------------------------
DGVUserData.DataSource = dtTable 'Gets or sets the data source that the DataGridView is displaying data for.
dtTableGrd = dtTable 'Entering data from dtTable into dtTableGrd, dtTableGrd is used to find data and display it on DataGridView.
Dim imageColumn = DirectCast(DGVUserData.Columns("Image"), DataGridViewImageColumn)
imageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom
'-------------------------------------------
DGVUserData.Sort(DGVUserData.Columns(0), ListSortDirection.Ascending)
LblTotalUser.Text = "Total Users : " & DGVUserData.RowCount
Me.Text = "VB Net Firebase RealTime Database"
LabelRecordView.Text = "Record View"
DisplayRecLoad(True)
DGVUserData.ClearSelection()
Catch ex As Exception
If ex.Message = "One or more errors occurred." Then
MessageBox.Show("Cannot connect to firebase, check your network !", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf ex.Message = "Object reference not set to an instance of an object." Then
Dim dtTable As New DataTable
dtTable.Columns.Add("Name")
dtTable.Columns.Add("ID")
dtTable.Columns.Add("Gender")
dtTable.Columns.Add("City")
dtTable.Columns.Add("Image", GetType(Image))
DGVUserData.DataSource = dtTable
MessageBox.Show("Database not found or Database is empty.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Me.Text = "VB Net Firebase RealTime Database"
LabelRecordView.Text = "Record View"
DisplayRecLoad(True)
End Try
End Sub
'-------------------------------------------
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
client = New FireSharp.FirebaseClient(fcon)
BtnRefresh_Click(sender, e)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
CBSearchBy.SelectedIndex = 0
End Sub
Private Sub BtnCreateID_Click(sender As Object, e As EventArgs) Handles BtnCreateID.Click
Try
TBID.Text = "Please wait..."
Dim r As Random = New Random
Dim num As Integer
num = (r.Next(1, 99999))
Dim IDresults As String = Strings.Right("00000" & num.ToString(), 5)
Dim Check_ID = client.Get("PersonDB/" + IDresults)
'-------------------------------------------Conditions to check whether the ID has been used.
If Check_ID.Body <> "null" Then
MessageBox.Show("The same ID is found, create another ID by pressing the Create ID button.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
TBID.Text = IDresults
End If
'-------------------------------------------
Catch ex As Exception
If ex.Message = "One or more errors occurred." Then
TBID.Clear()
MessageBox.Show("Cannot connect to firebase, check your network !", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
TBID.Clear()
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Try
End Sub
Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles BtnSave.Click
If BtnSave.Text = "Save" Then 'Conditions for storing data to the database.
If TBName.Text = Nothing Then
MessageBox.Show("Name field is empty." & vbCrLf & "Please fill in the name field to continue.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
If TBID.Text = Nothing Then
MessageBox.Show("ID field is empty." & vbCrLf & "Please fill in the name field to continue.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
If CBGender.Text = Nothing Then
MessageBox.Show("Gender field is empty." & vbCrLf & "Please fill in the name field to continue.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
If TBCity.Text = Nothing Then
MessageBox.Show("City field is empty." & vbCrLf & "Please fill in the name field to continue.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
If IMG_FileNameInput = Nothing Then
MessageBox.Show("Image file has not been entered." & vbCrLf & "Please enter the image to continue.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
Try
Me.Text = "VB Net Firebase RealTime Database (Saving. Please wait...)"
LabelRegistration.Text = "Registration (Saving. Please wait...)"
DisplayRegSave(False)
Dim ImgData As String = ImageToBase64(PictureBoxUserReg.Image)
Dim PD As New PersonalData() With
{
.Name = TBName.Text,
.ID = TBID.Text,
.Gender = CBGender.Text,
.City = TBCity.Text,
.Image = ImgData
}
Dim save = client.Set("PersonDB/" + TBID.Text, PD) 'To save data to Firebase Database.
DisplayRegSave(True)
LabelRegistration.Text = "Registration"
Me.Text = "VB Net Firebase RealTime Database"
MessageBox.Show("Data saved successfully.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
BtnClearAll_Click(sender, e)
BtnRefresh_Click(sender, e)
Catch ex As Exception
If ex.Message = "One or more errors occurred." Then
MessageBox.Show("Cannot connect to firebase, check your network !", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
DisplayRegSave(True)
LabelRegistration.Text = "Registration"
Me.Text = "VB Net Firebase RealTime Database"
End Try
Else 'Conditions for updating data to a database.
If TBName.Text = Nothing Then
MessageBox.Show("Name field is empty." & vbCrLf & "Please fill in the name field to continue.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
If TBCity.Text = Nothing Then
MessageBox.Show("City field is empty." & vbCrLf & "Please fill in the name field to continue.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
Try
Me.Text = "VB Net Firebase RealTime Database (Updating. Please wait...)"
LabelRegistration.Text = "Registration (Updating. Please wait...)"
DisplayRegSave(False)
Dim ImgData As String = ImageToBase64(PictureBoxUserReg.Image)
Dim PD As New PersonalData() With
{
.Name = TBName.Text,
.ID = TBID.Text,
.Gender = CBGender.Text,
.City = TBCity.Text,
.Image = ImgData
}
Dim update = client.Update("PersonDB/" + TBID.Text, PD) 'To update data to Firebase Database.
DisplayRegSave(True)
LabelRegistration.Text = "Registration"
Me.Text = "VB Net Firebase RealTime Database"
MessageBox.Show("Data updated successfully.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
BtnClearAll_Click(sender, e)
BtnRefresh_Click(sender, e)
Catch ex As Exception
If ex.Message = "One or more errors occurred." Then
MessageBox.Show("Cannot connect to firebase, check your network !", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
DisplayRegSave(True)
LabelRegistration.Text = "Registration"
Me.Text = "VB Net Firebase RealTime Database"
End Try
End If
End Sub
Private Sub PictureBoxUserReg_Click(sender As Object, e As EventArgs)
OpenFileDialogUserImage.FileName = ""
OpenFileDialogUserImage.Filter = "JPEG (*.jpeg;*.jpg)|*.jpeg;*.jpg"
If (OpenFileDialogUserImage.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
IMG_FileNameInput = OpenFileDialogUserImage.FileName
PictureBoxUserReg.ImageLocation = IMG_FileNameInput
End If
End Sub
Private Sub BtnClearAll_Click(sender As Object, e As EventArgs) Handles BtnClearAll.Click
TBName.Clear()
TBID.Clear()
CBGender.Text = Nothing
TBCity.Clear()
PictureBoxUserReg.Image = My.Resources.avatar
IMG_FileNameInput = Nothing
BtnSave.Text = "Save"
BtnCreateID.Enabled = True
End Sub
Private Sub BtnRefresh_Click(sender As Object, e As EventArgs) Handles BtnRefresh.Click
Me.Text = "VB Net Firebase RealTime Database (Loading. Please wait...)"
LabelRecordView.Text = "Record View (Loading. Please wait...)"
DisplayRecLoad(False)
ShowRecord()
End Sub
Private Sub BtnEdit_Click(sender As Object, e As EventArgs) Handles BtnEdit.Click
'-------------------------------------------The condition to check whether the data to be edited has been selected in DataGridView
If DGVUserData.SelectedRows.Count = 0 Then
MessageBox.Show("Please select one row in the table to edit.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
'-------------------------------------------
'-------------------------------------------Conditions to check whether there is more than one data selected on DataGridView.
If DGVUserData.SelectedRows.Count > 1 Then
MessageBox.Show("You select " & DGVUserData.SelectedRows.Count & " rows in the Table." & vbCrLf & "The Edit feature can only edit one row in a table.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
'-------------------------------------------
If DGVUserData.SelectedRows.Count = 1 Then
TBName.Text = DGVUserData.SelectedRows(0).Cells("Name").Value
TBID.Text = DGVUserData.SelectedRows(0).Cells("ID").Value
CBGender.Text = DGVUserData.SelectedRows(0).Cells("Gender").Value
TBCity.Text = DGVUserData.SelectedRows(0).Cells("City").Value
PictureBoxUserReg.Image = DGVUserData.Rows(DGVUserData.SelectedRows(0).Index).Cells("Image").Value
BtnSave.Text = "Update"
End If
End Sub
Private Sub BtnDelete_Click(sender As Object, e As EventArgs) Handles BtnDelete.Click
'-------------------------------------------Conditions for deleting all data in the database.
If AllCellsSelected(DGVUserData) = True Then
Try
If MsgBox("Are you sure you want to delete all data ?", MsgBoxStyle.Question + MsgBoxStyle.OkCancel, "Confirmation") = MsgBoxResult.Cancel Then Return
Me.Text = "VB Net Firebase RealTime Database (Deleting. Please wait...)"
LabelRecordView.Text = "Record View (Deleting. Please wait...)"
DisplayRecLoad(False)
Dim deleteAll = client.Delete("PersonDB") 'To delete data in the Firebase Database
MessageBox.Show("Data successfully deleted.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.Text = "VB Net Firebase RealTime Database"
LabelRecordView.Text = "Record View"
DisplayRecLoad(True)
BtnRefresh_Click(sender, e)
Return
Catch ex As Exception
If ex.Message = "One or more errors occurred." Then
MessageBox.Show("Cannot connect to firebase, check your network !", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Me.Text = "VB Net Firebase RealTime Database"
LabelRecordView.Text = "Record View"
DisplayRecLoad(True)
End Try
End If
'-------------------------------------------
'-------------------------------------------Conditions for deleting one data or several data in the Database.
Try
If DGVUserData.SelectedRows.Count = 0 Then
MessageBox.Show("Please select one row or several rows to be deleted.", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
If MsgBox("Are you sure you want to delete this data ?", MsgBoxStyle.Question + MsgBoxStyle.OkCancel, "Confirmation") = MsgBoxResult.Cancel Then Return
Me.Text = "VB Net Firebase RealTime Database (Deleting. Please wait...)"
LabelRecordView.Text = "Record View (Deleting. Please wait...)"
DisplayRecLoad(False)
For Each row As DataGridViewRow In DGVUserData.SelectedRows
If row.Selected = True Then
Dim delete = client.Delete("PersonDB/" & row.DataBoundItem(1).ToString)
End If
Next
MessageBox.Show("Data successfully deleted.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.Text = "VB Net Firebase RealTime Database"
LabelRecordView.Text = "Record View"
DisplayRecLoad(True)
BtnRefresh_Click(sender, e)
Catch ex As Exception
If ex.Message = "One or more errors occurred." Then
MessageBox.Show("Cannot connect to firebase, check your network !", "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Me.Text = "VB Net Firebase RealTime Database"
LabelRecordView.Text = "Record View"
DisplayRecLoad(True)
End Try
'-------------------------------------------
End Sub
Private Function AllCellsSelected(dgv As DataGridView) As Boolean
If dgv.RowCount = 0 Then
AllCellsSelected = False
Return AllCellsSelected
End If
AllCellsSelected = (dgv.SelectedCells.Count = (dgv.RowCount * dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible)))
If dgv.RowCount = 1 Then
AllCellsSelected = False
End If
End Function
Private Sub BtnClearSelection_Click(sender As Object, e As EventArgs) Handles BtnClearSelection.Click
DGVUserData.ClearSelection()
End Sub
Private Sub TBSearch_TextChanged(sender As Object, e As EventArgs)
'dtTableGrd.DefaultView.RowFilter = CBSearchBy.Text & " Like '" & TBSearch.Text & "%'" 'To search for data on the DataGridView
DGVUserData.ClearSelection()
End Sub
Private Sub EditToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EditToolStripMenuItem.Click
BtnEdit_Click(sender, e)
End Sub
Private Sub DeleteToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DeleteToolStripMenuItem.Click
BtnDelete_Click(sender, e)
End Sub
Private Sub SelectAllToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SelectAllToolStripMenuItem.Click
DGVUserData.SelectAll()
End Sub
Private Sub ClearSelectionToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClearSelectionToolStripMenuItem.Click
BtnClearSelection_Click(sender, e)
End Sub
Private Sub TBSearch_TextChanged_1(sender As Object, e As EventArgs) Handles TBSearch.TextChanged
dtTableGrd.DefaultView.RowFilter = CBSearchBy.Text & " Like '" & TBSearch.Text & "%'" 'To search for data on the DataGridView
DGVUserData.ClearSelection()
End Sub
Private Sub PictureBoxUserReg_Click_1(sender As Object, e As EventArgs) Handles PictureBoxUserReg.Click
OpenFileDialogUserImage.FileName = ""
OpenFileDialogUserImage.Filter = "JPEG (*.jpeg;*.jpg)|*.jpeg;*.jpg"
If (OpenFileDialogUserImage.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
IMG_FileNameInput = OpenFileDialogUserImage.FileName
PictureBoxUserReg.ImageLocation = IMG_FileNameInput
End If
End Sub
End Class
Thanks for watching!