/ / Como excluir o conteúdo de um registro relacionado de duas tabelas (usando SQLTransaction)? - vb.net, tsql

Como excluir o conteúdo de um registro relacionado de duas tabelas (usando SQLTransaction)? - vb.net, tsql

Estou recebendo o formato da string de inicializaçãonão está em conformidade com a especificação que começa no índice 0 "erro tendo usado o código a seguir. Os comandos devem excluir um registro relacionado de duas tabelas, nomeadamente StudentDetails.Students como a tabela principal e RegistrationDetails.Registration como a tabela filho.

Private Sub cmdDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDelete.Click
Try
Dim cd As String

If txtStudentID.Text = "" And txtName.Text = "" And cboDay.Text = "" And cboMonth.Text = "" And txtYear.Text = "" And lblAge.Text = "" And radioMale.Checked = False Or RadioFemale.Checked = False And txtGName.Text = "" And txtPhone.Text = "" And txtEmail.Text = "" And txtAddress.Text = "" And txtTown.Text = "" And cboRegion.Text = "" And PictureBox1.ImageLocation = "" Then
MessageBox.Show("There is no record selected to delete. Search for the record to delete.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
cd = MessageBox.Show("You are about to delete this record. Are you sure you want to delete?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If cd = vbYes Then
Using c As New SqlConnection("connection string")
c.Open()
Using tx As SqlTransaction = c.BeginTransaction()
Try
Using cmd As SqlCommand = c.CreateCommand()
cmd.CommandText = "delete from RegistrationDetails.Registration where StudentId = @studentId"
cmd.Parameters.Add("@studentId", SqlDbType.BigInt).Value = txtStudentID.Text
cmd.ExecuteNonQuery()

cmd.CommandText = "delete from StudentDetails.Students where StudentId = @studentId"
cmd.Parameters.Add("@studentId", SqlDbType.BigInt).Value = txtStudentID.Text
cmd.ExecuteNonQuery()

tx.Commit()
End Using
Catch generatedExceptionName As Exception
tx.Rollback()
" take care of exception here
Throw
End Try
End Using
End Using
MessageBox.Show("Record deleted", "Deleted", MessageBoxButtons.OK, MessageBoxIcon.Information)
showgrid()
txtStudentID.Clear()
txtName.Clear()
cboDay.Text = ""
cboMonth.Text = ""
txtYear.Clear()
lblAge.Text = ""
If radioMale.Checked = True Then
Gender = ""
End If
txtGName.Clear()
txtPhone.Clear()
txtEmail.Clear()
txtAddress.Clear()
txtTown.Clear()
cboRegion.Text = ""
PictureBox1.Image = PictureBox1.ErrorImage
txtStudentID.Focus()
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

Respostas:

1 para resposta № 1

Experimente desta forma, pode resolver o seu problema.

cmd.CommandText = "delete from RegistrationDetails.Registration where StudentId = @studentId"
Dim sqlParam as SqlParameter = cmd.Parameters.Add("@studentId", SqlDbType.BigInt)
sqlParam.Value = txtStudentID.Text
cmd.ExecuteNonQuery()

cmd.CommandText = "delete from StudentDetails.Students where StudentId = @studentId"
sqlParam.Value = txtStudentID.Text
cmd.ExecuteNonQuery()

Na verdade, você está usando um único SqlCommand para consulta e sempre que adiciona o mesmo parâmetro.

Espero que isso ajude você.