Произошло исключение SQLException: неправильный синтаксис рядом с ' '

я получил

SqlException: неверный синтаксис рядом с nvarchar
Неверный синтаксис рядом с "ID"

в моем коде. Пожалуйста, может кто-нибудь помочь мне решить это?

Мой код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;

namespace WindowsFormsApplication1
{
   partial class Form2 : Form
   {
       public Form2()
       {
           InitializeComponent();
       }

       SqlCommand cmd;
       SqlConnection con = new SqlConnection(@"Data Source=HAIER-PC;Initial Catalog=PDCS;Integrated Security=True");
       SqlDataAdapter SDA;

       private void button3_Click(object sender, EventArgs e)
       {
            con.Open();
            cmd = new SqlCommand("INSERT INTO CusUtil(Customer ID, Age, Experience, Preferred Alternatives, Outer Shell, Base Gasket, Vent, Vent Type, Impact Absorbent Liner, Eyeport Gasket, Face Shield, Comfort Liner, Chin Strap, Weight, Estimated Price)
                                  VALUES(@Customer ID, @Age, @Experience, @Preferred Alternatives, @Outer Shell, @Base Gasket, @Vent, @Vent Type, @Impact Absorbent Liner, @Eyeport Gasket, @Face Shield, @Comfort Liner, @Chin Strap, @Weight, @Estimated Price)", con);
           cmd.Parameters.Add("@Customer ID", textBox1.Text);
           cmd.Parameters.Add("@Age", comboBox1.SelectedItem.ToString());
           cmd.Parameters.Add("@Experience", comboBox2.SelectedItem.ToString());
           cmd.Parameters.Add("@Preferred Alternatives", comboBox3.SelectedItem.ToString());
           cmd.Parameters.Add("@Outer Shell", textBox2.Text);
           cmd.Parameters.Add("@Base Gasket", textBox3.Text);
           cmd.Parameters.Add("@Vent", textBox4.Text);
           cmd.Parameters.Add("@Vent Type", textBox5.Text);
           cmd.Parameters.Add("@Impact Absorbent Liner", textBox6.Text);
           cmd.Parameters.Add("@Eyeport Gasket", textBox7.Text);
           cmd.Parameters.Add("@Face Shield",textBox8.Text);
           cmd.Parameters.Add("@Comfort Liner",textBox9.Text);
           cmd.Parameters.Add("@Chin Strap",textBox10.Text);
           cmd.Parameters.Add("@Weight",textBox11.Text);
           cmd.Parameters.Add("@Estimated Price",textBox12.Text);

           cmd.ExecuteNonQuery();
           con.Close();
       }
    }
}

Ошибка возникает в ExecuteNonQuery. Код просто сохраняет данные в базу данных SQL Server.


person annam jamshed    schedule 09.11.2018    source источник
comment
Не думайте, что у вас могут быть пробелы в именах столбцов, по крайней мере, если они не окружены [ ] (по крайней мере, для MSSQL, и я думаю, что MYSQL то же самое). Я полагаю, что это ошибка: идентификатор клиента. После клиента есть пробел, поэтому ваша ошибка говорит о том, что идентификатор неисправен из-за пробела.   -  person Brad    schedule 09.11.2018
comment
См. stackoverflow.com/questions/14190798/   -  person Rui Jarimba    schedule 09.11.2018
comment
@Brad, если я правильно помню, в mysql символ "   -  person Cleptus    schedule 09.11.2018
comment
вы должны использовать backtics для имени столбца с пробелом `(в окнах ALT + 96)   -  person scaisEdge    schedule 09.11.2018
comment
@ bradbury9 Возможно, это так, для MySQL прошло некоторое время, но я знаю, что у вас не может быть пробелов. Спасибо   -  person Brad    schedule 09.11.2018
comment
Вы понимаете, что у вас есть символ разрыва строки после Initial в строке подключения? Это действительно работает?   -  person Rufus L    schedule 09.11.2018
comment
Как вы думаете, зачем здесь нужны пробелы "@Outer Shell"? Зачем вам такие созвучные имена? вы можете сделать @1 @2 @3 . . . . Если вы создали этот дизайн - измените его, но если это создано для вас, для имени столбца - используйте [Impact Absorbent Liner]   -  person T.S.    schedule 09.11.2018
comment
Ребят, код явно для SQL SERVER. Он использует SqlCommand, а не MySqlCommand. Таким образом, все предложения галочки недействительны.   -  person T.S.    schedule 09.11.2018


Ответы (2)


В mysql разрешено использование пробела в имени столбца, но имя столбца должно быть заключено в обратные кавычки.. так что просто для того, чтобы пользователь мог видеть команду с обратными кавычками

но, как предложил Ууэрдо.. пробел в параметре не должен использоваться... попробуйте использовать подчеркивание (или случай верблюда)

`

 cmd = new SqlCommand("INSERT INTO CusUtil(`Customer ID`, 
        Age,Experience,`Preferred Alternatives`,`Outer Shell`,`Base 
        Gasket`,Vent,`Vent Type`,`Impact Absorbent Liner`,`Eyeport Gasket`
        ,`Face Shield`,`Comfort Liner`,`Chin Strap`,Weight,`Estimated 
        Price`)VALUES(@Customer_ID,@Age,@Experience,@Preferred_Alternatives,
     @Outer_Shell,@Base_Gasket,@Vent,@Vent_Type,@Impact_Absorbent_Liner,
      @Eyeport_Gasket,@Face_Shield,@Comfort_Liner,
   @Chin_Strap,@Weight,@Estimated_Price)",con);

в SQLSERVER используйте [] вместо ``

person scaisEdge    schedule 09.11.2018
comment
Пробелы в токенах параметров, вероятно, также необходимо удалить. - person Uueerdo; 09.11.2018
comment
Это на самом деле о сервере Sql, а не о моем sql - person T.S.; 09.11.2018
comment
В sql-сервере это [ ], а не ` ` - person T.S.; 09.11.2018
comment
Скобки удаляют синтаксическую ошибку, но возникает другая ошибка, т.е. необходимо объявить скалярную переменную @. - person annam jamshed; 09.11.2018
comment
@annamjamshed вы исправили пробелы в ваших именованных параметрах ... в запросе и вызовах добавления параметров? - person Uueerdo; 09.11.2018
comment
да, я сделал это - person annam jamshed; 09.11.2018
comment
@annamjamshed Ну, мы не можем знать, если вы не исправите вопрос и не отправите код, который на самом деле не работает. - person T.S.; 09.11.2018

Не могли бы вы добавить [ ] - квадратные скобки для столбца с пробелами и удалить пробелы в параметрах. это поможет, потому что все зависит от режима, который вы установили в mySQL

person user1597990    schedule 09.11.2018
comment
Это не ответ, а комментарий. И это не мой sql, а sql server. И да, нужны брекеты. - person T.S.; 09.11.2018
comment
@Т.С. да, это сервер sql, я бы по ошибке поставил неправильный тег - person annam jamshed; 09.11.2018