Выражение критериев несоответствия типов данных в vb.net, доступ при вставке - PullRequest
0 голосов
/ 06 марта 2019
Imports System.Data.OleDb
Imports System.IO

Public Class insuranceform
    Dim read As String
    Dim datafile As String
    Dim connstring As String
    Dim cmd As New OleDbCommand
    Public da As New OleDbDataAdapter
    Dim str As String
    Public ds As New DataSet
    Public ds1 As New DataSet
    Public ds2 As New DataSet
    Dim myconnection As OleDbConnection = New OleDbConnection

    Dim er As Integer
    Private Sub insuranceform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        read = "provider=microsoft.ace.oledb.12.0;data source="
        datafile = "C:\Users\DELL\source\repos\HRIS SYSTEM\loginformdatabase\BLUESTREAM.accdb"
        connstring = read & datafile
        myconnection.ConnectionString = connstring
        ds.Clear()
        DateTimePicker1.Value = DateTime.Now
        DateTimePicker2.Value = DateTime.Now
        DateTimePicker3.Value = DateTime.Now
        If myconnection.State = ConnectionState.Open Then
            myconnection.Close()
        End If
        myconnection.Open()
        er = 0
        'cn.Open()
        str = "select * from insurancedetail"
        cmd = New OleDbCommand(str, myconnection)
        da.SelectCommand = cmd
        da.Fill(ds, "insurancedetail")
    End Sub

    Private Sub Save_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ds.Clear()
        str = "select * from insurancedetail"
        cmd = New OleDbCommand(str, myconnection)
        da.SelectCommand = cmd
        da.Fill(ds, "insurancedetail")
        If er = 0 Then
            Try
                cmd.Connection = myconnection
                cmd.CommandText = "insert into insurancedetail(Name,EmployeeID,PAN,UniversalAccountNumber,AdharNo,CurrentAddress,PermanentAddress,Landline,MartialStatus,MobileNumber,EmergencyContactNo,BloodGroup,DoyouHaveHDFCbankaccount,NameOfdependentmember_F) values('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "','" & TextBox5.Text & "','" & TextBox6.Text & "','" & TextBox7.Text & "','" & TextBox8.Text & "','" & ComboBox2.Text & "','" & TextBox9.Text & "','" & TextBox10.Text & "','" & TextBox11.Text & "','" & ComboBox1.Text & "','" & TextBox12.Text & "')"
                cmd.ExecuteNonQuery() 'if command is executed'
                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()
                ElseIf result = DialogResult.Yes Then
                    ds.Clear()
                    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()
                    DateTimePicker1.ResetText()
                    DateTimePicker2.ResetText()
                    DateTimePicker3.ResetText()
                    str = "select * from insurancedetail"
                    cmd = New OleDbCommand(str, myconnection)
                    da.SelectCommand = cmd
                    da.Fill(ds, "insurancedetail")
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            'insert close
        End If
        'myconnection close
    End Sub

1 Ответ

0 голосов
/ 07 марта 2019

Слишком много переменных уровня класса.Особенно не 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
...