Сохранение VB.NET и MySql в двух таблицах; родительская таблица и дочерняя таблица

0

Здесь я пытаюсь сохранить информацию на две таблицы (используя vb.net); students (родительский стол) и guardians (ребенок). Связь между таблицами уже создана, внешний ключ (guardian id), который автоматически увеличивается. Ниже мой код, ваша помощь будет оценена по достоинству.

    Dim cn As New MySqlConnection
    Dim cmd As New MySqlCommand
    Dim dr As MySqlDataReader

    cn.ConnectionString = "Server=localhost; user id='root'; password='' ; database='dbname'"
    cmd.Connection = cn
    cn.Open()
    cmd.CommandText = "Select stud_id, firstname, lastname, dob, sickness, sex, pin, payment_type, level_stream FROM students WHERE stud_id = '" & txtstud_id.Text & "'"
    'cmd.CommandText = "Select guardian_id, firstname1, lastname1, sex1, occupation, relationship, address, cell, telephone, email FROM guardians WHERE guardian_id = '" & txtgid.Text & "'"
    dr = cmd.ExecuteReader

    If dr.HasRows Then
        MsgBox("Student ID already exist!", MsgBoxStyle.Critical, "Checkpoint")
    Else
        cmd.Dispose()
        dr.Dispose()
        cmd.CommandText = " Insert into students (stud_id, firstname, lastname, dob, sickness, sex, pin, payment_type, level_stream) Values ('" & txtstud_id.Text & "','" & txtfname.Text & "','" & txtlname.Text & "','" & DateTimePicker1.Text & "','" & txtsickness.Text & "','" & cmbsex.Text & "','" & txtpin.Text & "','" & cmbpay_opt.Text & "','" & cmblevel_stream.Text & "')"
        'cmd1.CommandText = " Insert into guardians (guardian_id, firstname1, lastname1, sex1, occupation, relationship, address, cell, telephone, email) Values ('" & txtgid.Text & "','" & txtfname1.Text & "','" & txtlname1.Text & "','" & cmbsex1.Text & "','" & txtoccupation.Text & "', '" & txtrelationship.Text & "','" & txtaddress.Text & "', '" & txtcell.Text & "','" & txttel.Text & "','" & txtemail.Text & "')"

        cmd.ExecuteNonQuery()
        MsgBox("Information successfully saved", MsgBoxStyle.Information, "Saving data succeed")
        txtstud_id.Clear()
        txtstud_id.Focus()
        txtfname.Clear()
        txtlname.Clear()
        DateTimePicker1.Text = String.Empty
        cmbsex.Text = String.Empty
        txtpin.Clear()
        txtsickness.Clear()
        txtgid.Clear()
        txtfname1.Clear()
        txtlname1.Clear()
        cmbsex1.Text = String.Empty
        txtoccupation.Clear()
        txtrelationship.Clear()
        cmbpay_opt.Text = String.Empty
        txtaddress.Clear()
        txtcell.Clear()
        txttel.Clear()
        txtemail.Clear()
        cmblevel_stream.Text = String.Empty

    End If
  • 0
    Не объединяйте текст и значения, чтобы сделать запрос. Используйте параметры SQL
  • 0
    Так в чем проблема?
Показать ещё 5 комментариев
Теги:

1 ответ

0

Вот пример для отдельных исполнений в соответствии с тем, что я сказал в комментариях. Пожалуйста, прочитайте комментарии в сегменте кода.

Dim cn As New MySqlConnection
//''1st Commnad variable
Dim cmd As New MySqlCommand
 //''2nd Commnad variable
Dim cmd1 As New MySqlCommand
 //''3rd Commnad variable
Dim cmd2 As New MySqlCommand

Dim dr As MySqlDataReader

cn.ConnectionString = "Server=localhost; user id='root'; password='' ; database='dbname'"

cmd.Connection = cn

cn.Open()

cmd.CommandText = "Select stud_id, firstname, lastname, dob, sickness, sex, pin, payment_type, level_stream FROM students WHERE stud_id = '" & txtstud_id.Text & "'"

dr = cmd.ExecuteReader

If dr.HasRows Then
    MsgBox("Student ID already exist!", MsgBoxStyle.Critical, "Checkpoint")
    cmd.Dispose()
    dr.Dispose()
    cn.Close()
Else
    cmd.Dispose()
    dr.Dispose()
    //'In this case you don't want to close the connection because you executing another queries too. 
    //'otherwise you have to check connection status and do open or close according to the status.
    //'For Example
    //'If (cn.State = ConnectionState.Closed)Then
    //' cn.Open()
    //'End if



    cmd1.Connection = cn
    cmd1.CommandText = " Insert into students (stud_id, firstname, lastname, dob, sickness, sex, pin, payment_type, level_stream) Values ('" & txtstud_id.Text & "','" & txtfname.Text & "','" & txtlname.Text & "','" & DateTimePicker1.Text & "','" & txtsickness.Text & "','" & cmbsex.Text & "','" & txtpin.Text & "','" & cmbpay_opt.Text & "','" & cmblevel_stream.Text & "')"
    cmd1.ExecuteNonQuery()
    cm1.Dispose()


    cmd2.Connection = cn
    cmd2.CommandText = " Insert into guardians (guardian_id, firstname1, lastname1, sex1, occupation, relationship, address, cell, telephone, email) Values ('" & txtgid.Text & "','" & txtfname1.Text & "','" & txtlname1.Text & "','" & cmbsex1.Text & "','" & txtoccupation.Text & "', '" & txtrelationship.Text & "','" & txtaddress.Text & "', '" & txtcell.Text & "','" & txttel.Text & "','" & txtemail.Text & "')"
    cmd2.ExecuteNonQuery()
    cmd2.Dispose()


    //'Close when its over. otherwise you have to check whether connection is open or not before you start trans queries to database server. See else statement comments for example.
    cn.Close()

    MsgBox("Information successfully saved", MsgBoxStyle.Information, "Saving data succeed")
End If
//'Disposing cmd and dr

Вы можете использовать ту же команду, но вам нужно подумать, как ее использовать. Когда вы выполняете команду или datareader, вы должны ее уничтожить. И больше беспокоится о свойствах подключения к закрытому или открытому.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню