Member 12905345 Ответов: 1

Получение этой ошибки со следующим запросом в SQL server 2014


У меня есть кнопки "Обновить"и " удалить". У них одни и те же ошибки...


Выражение небулевского типа, заданное в контексте, где ожидается условие, рядом с "ID".

Что я уже пробовал:

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
        Try
            conn = New SqlConnection(strcon)
            conn.Open()
            Dim str As String = "Update PatientInfo set Surname=@Surname,Firstname=@Firstname,MI=@MI,Gender=@Gender,Birthday=@Birthday,Address=@Address,Contact=@Contact,Email=@Email Where Patient ID=@PID"
            cmd = New SqlCommand(str, conn)
            cmd.Parameters.AddWithValue("@Surname", txtSurname.Text)
            cmd.Parameters.AddWithValue("@Firstname", txtFirstname.Text)
            cmd.Parameters.AddWithValue("@MI", txtMI.Text)
            cmd.Parameters.AddWithValue("@Gender", CmbxGender.Text)
            cmd.Parameters.AddWithValue("@Birthday", dtpBday.Text)
            cmd.Parameters.AddWithValue("@Address", txtAdd.Text)
            cmd.Parameters.AddWithValue("@Contact", txtContact.Text)
            cmd.Parameters.AddWithValue("@Email", txtEmail.Text)
            cmd.Parameters.AddWithValue("@PID", txtPID.Text)
            cmd.ExecuteNonQuery()
            MessageBox.Show("Data has been updated!")
            loadData()
            cmd.Dispose()
            conn.Close()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
'==========================================================================

Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click

        Dim cmd As New SqlCommand
        Try

            conn.ConnectionString = strcon
            conn.Open()
            cmd.Connection = conn
            cmd.CommandText = "Delete from PatientInfo Where Patient ID=" + txtPID.Text
            cmd.ExecuteNonQuery()
            MessageBox.Show("Data has been deleted")
            loadData()

            conn.Close()


        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

[no name]

Попробуйте [код пациента]=ПИД@

1 Ответов

Рейтинг:
9

Dave Kreskowiak

Это плохая идея-иметь пробелы в именах таблиц и столбцов. В вашем SQL-запросе, по-видимому, есть столбец под названием "идентификатор пациента". Вероятно, это должно быть "PatientID", но если вы настаиваете на сохранении этого имени столбца с пробелом в нем, вы должны указать имя столбца во всех операторах SQL в квадратных скобках:

DELETE FROM PatientInfo WHERE [Patient ID]=@PID"


О, и только потому, что у вас есть только один параметр в запросе DELETE, это не означает, что вам может сойти с рук строка, объединяющая идентификатор в конце запроса. Всегда, всегда, всегда используйте параметризованные запросы, даже если вы используете только один параметр.


Member 12905345

Когда я ставлю " DELETE FROM PatientInfo WHERE [Patient ID]=@PID"
Возникает ошибка со словами "необходимо объявить скалярную переменную" @PID"
и еще одна ошибка: "не разрешено изменять "ConnectionString". Текущее состояние соединения открыто"