Это шаблон для большей части кода базы данных в ADO. net.
Сначала необходимо убедиться, что введенные пользователем данные верны. Для чисел вы можете использовать .TryParse
, который возвращает True
или False
. Если True, он присвоит преобразованное значение второму параметру.
Сохраните ваши Соединения и Команды в том методе, в котором они используются, чтобы вы могли быть уверены, что они закрыты и утилизированы. Блок Using...End Using
сделает это за вас, даже если есть ошибка. Запятая в конце первой строки Using
означает, что мы включаем следующую строку в блок, в данном случае, Команду.
Всегда использовать параметры. Это будет поможет вам избежать Sql инъекций и упростит написание текста команды. Мы используем значение, которое было установлено в .TryParse
, paid
, вместо того, чтобы снова преобразовывать PricePay.Text
.
Не открывайте соединение, пока непосредственно перед .Execute. Связи являются ценным ресурсом. Он закрыт и расположен по адресу End Using
.
. Это может не решить вашу проблему. Смотрите мои вопросы в комментариях.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim paid As Decimal
If Not Decimal.TryParse(PricePay.Text, paid) Then
MessageBox.Show("Please put a valid number in Price Paid.")
Exit Sub
End If
Try
Using con As New OleDbConnection("Your connection string"),
cmd As New OleDbCommand("INSERT INTO [tbl_RegisteredRecords] SELECT * FROM [Register] WHERE [Price]= ?", con)
cmd.Parameters.Add("@PricePaid", OleDbType.Decimal).Value = paid
con.Open()
Dim i = cmd.ExecuteNonQuery
If i > 0 Then
cmd.CommandText = "Delete * from Register WHERE ID = ?"
cmd.ExecuteNonQuery()
End If
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
loadrecord()
End Sub