Я продолжаю получать следующую ошибку:
System.Data.SqlClient.SqlException: «Неправильный синтаксис рядом с «StaffFirstname».»
Код показан здесь, я не вижу, что вызывает ошибку. Может кто-нибудь, пожалуйста, подскажите мне, что я делаю неправильно
Private Sub BtnInsertData_Click(sender As Object, e As EventArgs) Handles BtnInsertData.Click
If Con.State = ConnectionState.Open Then
Con.Close()
End If
Con.Open()
cmd = Con.CreateCommand()
cmd.CommandType = CommandType.Text
cmd.CommandText = "insert into Staff StaffFirstname='" + TxtStaffFirstName.Text + "',StaffLastName='" + TxtStaffLastName.Text + "',StaffAddress='" + TxtStaffAddress.Text + "',StaffCity='" + TxtStaffCity.Text + "',StaffState='" + TxtStaffState.Text + "' ,StaffPostCode='" + TxtStaffPostCode.Text + "',StaffPhoneNumber='" + TxtStaffPhoneNumber.Text + "',StaffEmail='" + TxtStaffEmail.Text + "' where Staffid = " & i & ""
cmd.ExecuteNonQuery()
Disp_Data()
TxtStaffFirstName.Text = ""
TxtStaffLastName.Text = ""
TxtStaffAddress.Text = ""
TxtStaffCity.Text = ""
TxtStaffState.Text = ""
TxtStaffPostCode.Text = ""
TxtStaffPhoneNumber.Text = ""
TxtStaffEmail.Text = ""
MessageBox.Show("Data inserted successfully")
End Sub
Ваш метод называется «вставка», но вы хотите добавить строки или обновить строки? Вставка не имеет смысла с ГДЕ. Или идея добавить строку, если она не существует, а в противном случае обновить?
Спасибо, ребята, я хотел и «Вставить», и «Обновить», но немного заблудился. Код ниже исправил ошибку обновления, однако фактическая таблица sql не обновилась. Я изучу это подробнее, и если не смогу разобраться, я задам еще один вопрос. Спасибо, ребята, я полный новичок, по профессии я очень старый инструментарий, и мне нравится изучать программирование, но, как вы можете видеть, я не очень хорош в этом. Кевин
Один из способов сделать это: update ... where <something>; if @@rowcount = 0 insert into table (...) values ...
Кроме того, вам следует узнать, почему мы хотим использовать параметры для пользовательского ввода, а не объединение строк. Простой способ показать, насколько ошибочен этот подход, — попробовать передать фамилию O'Brien
. Более страшный способ — передать идентификатор персонала 7; DELETE Staff;
.
Также вы используете объект глобального соединения, что является плохой идеей. Создайте и откройте соединение при необходимости, удалите его с помощью Using
.
Вы используете INSERT, но используете где. Я думаю, вы хотели вместо этого использовать оператор UPDATE, поскольку вы используете предложение WHERE.
If Con.State = ConnectionState.Open Then
Con.Close()
End If
Con.Open()
cmd = Con.CreateCommand()
cmd.CommandType = CommandType.Text
' Use UPDATE instead of INSERT and ensure to set the correct syntax
cmd.CommandText = "UPDATE Staff SET StaffFirstname = @FirstName, StaffLastName = @LastName, StaffAddress = @Address, StaffCity = @City, StaffState = @State, StaffPostCode = @PostCode, StaffPhoneNumber = @PhoneNumber, StaffEmail = @Email WHERE Staffid = @StaffId"
' Use parameters to prevent SQL injection
cmd.Parameters.AddWithValue("@FirstName", TxtStaffFirstName.Text)
cmd.Parameters.AddWithValue("@LastName", TxtStaffLastName.Text)
cmd.Parameters.AddWithValue("@Address", TxtStaffAddress.Text)
cmd.Parameters.AddWithValue("@City", TxtStaffCity.Text)
cmd.Parameters.AddWithValue("@State", TxtStaffState.Text)
cmd.Parameters.AddWithValue("@PostCode", TxtStaffPostCode.Text)
cmd.Parameters.AddWithValue("@PhoneNumber", TxtStaffPhoneNumber.Text)
cmd.Parameters.AddWithValue("@Email", TxtStaffEmail.Text)
cmd.Parameters.AddWithValue("@StaffId", i)
cmd.ExecuteNonQuery()
Disp_Data()
' Clear the text fields after the operation
TxtStaffFirstName.Text = ""
TxtStaffLastName.Text = ""
TxtStaffAddress.Text = ""
TxtStaffCity.Text = ""
TxtStaffState.Text = ""
TxtStaffPostCode.Text = ""
TxtStaffPhoneNumber.Text = ""
TxtStaffEmail.Text = ""
MessageBox.Show("Data Updated Successfully")
End Sub
@BillTürstandswithUkraine Почему нельзя использовать AddWithValue
? Добавленный вами URL-адрес может отключиться или быть удален, поэтому было бы лучше добавить хотя бы минимальное объяснение в свой комментарий.
Комментарии @JonasMetzler предназначены для немедленной обратной связи и, как ожидается, в какой-то момент будут удалены. Поэтому размещение ссылки приемлемо, поскольку предполагается, что автор сообщения скоро ее прочитает и, надеюсь, обновит свой ответ.
Взгляните на официальный документ для INSERT — у вас совершенно неправильный синтаксис… так и должно быть
INSERT INTO dbo.YourTable (list-of-columns) VALUES (list-of-values)