Синтаксическая ошибка C # в инструкции INSERT INTO - PullRequest
0 голосов
/ 04 октября 2011

У меня ошибка в строке: ins.ExecuteNonQuery (). ToString (); OledDbException было необработанным Синтаксическая ошибка в инструкции INSERT INTO.

Как мне это исправить?

string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Project.mdb";

OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString);
string newTagID = textBox1.Text;
string newUser = textBox2.Text;
string newAge = textBox3.Text;
string newPhoneNumber = textBox4.Text;

string insertString = "INSERT INTO jiahe ([Tag ID], User, Age, [Phone Number]) VALUES ('" + newTagID + "', '" + newUser + "', '" + newAge + "', '" + newPhoneNumber + "')";

OleDbCommand ins = new OleDbCommand(insertString, objConnection);
ins.Connection.Open();
ins.ExecuteNonQuery().ToString();
ins.Connection.Close();

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Ваша проблема, вероятно, одна из этих трех:

  1. Прямая синтаксическая ошибка, не ясно видимая с отвратительным непараметризованным оператором SQL: p
  2. newUser или в каком-то другом поле где-то есть ' и синтаксис искажается.
  3. Вы пытаетесь вставить числовое значение (Age?) В виде строки.

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

0 голосов
/ 04 октября 2011

Несмотря на это, вы должны изменить использование вашей команды, чтобы использовать параметры, а не создавать строку запроса с конкатенацией строк (которая подвержена атакам внедрения SQL).

Проблема, скорее всего, связана с тем, что [Tag ID], User, Age, [Phone Number] не являются строками. В вашем SQL любые нестроковые данные столбца не должны быть заключены в кавычки (').

Чтобы исправить непосредственную проблему (при условии, что [Tag ID] является целым числом):

    string insertString = "INSERT INTO jiahe ([Tag ID], User, Age, [Phone Number]) VALUES (" + newTagID + ", '" + newUser + "', '" + newAge + "', '" + newPhoneNumber + "')";

Однако вы должны структурировать свой код, чтобы избежать внедрения SQL, иметь более чистый код, а также не беспокоиться о кавычках:

    string insertString = "INSERT INTO jiahe ([Tag ID], User, Age, [Phone Number]) VALUES (@TagID, @User, @Age, @PhoneNumber)";

    OleDbCommand ins = new OleDbCommand(insertString, objConnection);
    ins.Parameters.Add(new OleDbParameter("@TagID",newTagID);
    ins.Parameters.Add(new OleDbParameter("@User",newUser);
    ins.Parameters.Add(new OleDbParameter("@Age",newAge);
    ins.Parameters.Add(new OleDbParameter("@PhoneNumber",newPhoneNumber);
    ins.Connection.Open();
    ins.ExecuteNonQuery();
    ins.Connection.Close();
...