Слишком много переменных уровня класса.Особенно не myconnection, а cmd.Что в мире?Процедуры не должны делать слишком много.Переместите некоторый код в другие процедуры, особенно если они будут вызываться более одного раза.
Для объектов базы данных используйте Использование блоков.Они гарантируют, что ваши объекты будут закрыты и удалены даже в случае ошибки.Похоже, вы не используете DataAdapter, поэтому просто заполните DataTable напрямую.Его можно привязать к DataGridView.
Нет причин снова заполнять DataTable перед сохранением.Возможно, вы захотите пополнить счет снова после сохранения.
Я предполагаю типы данных в вашей базе данных.Вы должны проверить базу данных, чтобы получить правильные типы данных и для строковых типов получить размер поля.Преобразуйте значения TextBox в правильные типы.Я использовал только некоторые из ваших полей в демонстрационных целях.Убедитесь, что вы добавляете свои параметры в том же порядке, в котором они отображаются в операторе sql.
Private dt As New DataTable
Private connString As String = "provider=microsoft.ace.oledb.12.0;data source=C:\Users\DELL\source\repos\HRIS SYSTEM\loginformdatabase\BLUESTREAM.accdb"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetDatePickerValues()
FillDataTable()
End Sub
Private Sub Save_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Using cn As New OleDbConnection(connString)
Using cmd As New OleDbCommand("Insert Into insurancedetail(Name,EmployeeID,PAN) Values(@Name, @EmployeeID, @PAN);", cn)
cmd.Parameters.Add("@Name", OleDbType.VarChar, 100).Value = TextBox1.Text
cmd.Parameters.Add("@EmployeeID", OleDbType.Integer).Value = CInt(TextBox2.Text)
cmd.Parameters.Add("@PAN", OleDbType.VarChar, 100).Value = TextBox3.Text
cn.Open()
cmd.ExecuteNonQuery()
End Using
End Using
FillDataTable()
Dim result As Integer = MessageBox.Show("New insurance detail Added. Want To Add Another One.", "Added", MessageBoxButtons.YesNo)
If result = DialogResult.No Then
Me.Close()
Else
ClearForm()
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub ClearForm()
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
TextBox4.Clear()
TextBox5.Clear()
TextBox6.Clear()
TextBox7.Clear()
TextBox8.Clear()
TextBox9.Clear()
TextBox10.Clear()
TextBox11.Clear()
TextBox12.Clear()
TextBox13.Clear()
TextBox14.Clear()
TextBox15.Clear()
TextBox16.Clear()
TextBox17.Clear()
TextBox18.Clear()
TextBox20.Clear()
ComboBox1.ResetText()
ComboBox2.ResetText()
ComboBox3.ResetText()
ComboBox4.ResetText()
ComboBox5.ResetText()
SetDatePickerValues()
End Sub
Private Sub FillDataTable()
Try
dt.Clear()
Using cn As New OleDbConnection(connString)
Using cmd As New OleDbCommand("Select * From insurancedetail", cn)
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub SetDatePickerValues()
DateTimePicker1.Value = DateTime.Now
DateTimePicker2.Value = DateTime.Now
DateTimePicker3.Value = DateTime.Now
End Sub