«Неверный синтаксис рядом с «StaffFirstname».» при попытке вставить данные

Я продолжаю получать следующую ошибку:

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

Взгляните на официальный документ для INSERT — у вас совершенно неправильный синтаксис… так и должно быть INSERT INTO dbo.YourTable (list-of-columns) VALUES (list-of-values)

marc_s 26.08.2024 08:42

Ваш метод называется «вставка», но вы хотите добавить строки или обновить строки? Вставка не имеет смысла с ГДЕ. Или идея добавить строку, если она не существует, а в противном случае обновить?

siggemannen 26.08.2024 09:22

Спасибо, ребята, я хотел и «Вставить», и «Обновить», но немного заблудился. Код ниже исправил ошибку обновления, однако фактическая таблица sql не обновилась. Я изучу это подробнее, и если не смогу разобраться, я задам еще один вопрос. Спасибо, ребята, я полный новичок, по профессии я очень старый инструментарий, и мне нравится изучать программирование, но, как вы можете видеть, я не очень хорош в этом. Кевин

Kevin 26.08.2024 11:32

Один из способов сделать это: update ... where <something>; if @@rowcount = 0 insert into table (...) values ...

siggemannen 26.08.2024 11:36

Кроме того, вам следует узнать, почему мы хотим использовать параметры для пользовательского ввода, а не объединение строк. Простой способ показать, насколько ошибочен этот подход, — попробовать передать фамилию O'Brien. Более страшный способ — передать идентификатор персонала 7; DELETE Staff;.

testing-for-ya 26.08.2024 12:59

Также вы используете объект глобального соединения, что является плохой идеей. Создайте и откройте соединение при необходимости, удалите его с помощью Using.

Charlieface 26.08.2024 13:38
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
6
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете 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
AddWithValue использовать не следует
Bill Tür stands with Ukraine 26.08.2024 09:01

@BillTürstandswithUkraine Почему нельзя использовать AddWithValue? Добавленный вами URL-адрес может отключиться или быть удален, поэтому было бы лучше добавить хотя бы минимальное объяснение в свой комментарий.

Jonas Metzler 26.08.2024 09:10

Комментарии @JonasMetzler предназначены для немедленной обратной связи и, как ожидается, в какой-то момент будут удалены. Поэтому размещение ссылки приемлемо, поскольку предполагается, что автор сообщения скоро ее прочитает и, надеюсь, обновит свой ответ.

Dale K 26.08.2024 09:18

Другие вопросы по теме