-1

Я пытаюсь ввести значение текстового поля в C# в поле в базе данных, имеющейся у меня. По какой-то причине, я получаю сообщение об ошибке, говоря:C# для доступа к запросу INSERT INTO

«необработанное исключение типа„System.Data.OleDb.OleDbException“произошло в System.Data.dll

Дополнительная информация: Ошибка синтаксиса в заявлении INSERT INTO. '

Не могу понять, что не так, это первый случай, когда я пытался сделать это в проекте, поэтому я не слишком разбираюсь в нем. Это мой код:

OleDbConnection connection = new OleDbConnection(CONNECTION STRING GOES HERE); 

connection.Open(); 

string playerName = textBox[i].Text; 
string query = "INSERT INTO (TotalPlayerName)(Player Name) VALUES(" + playerName + ")"; 
OleDbCommand command = new OleDbCommand(query, connection); 

command.ExecuteNonQuery(); 

, если это помогает, то база данных называется «Database» таблица называется «TotalPlayerName» и поле называется «игрока Имя»

+0

a) используйте параметры - действительно, но если вы собираетесь использовать голые строки, вам нужно заключить строковые значения в одинарные кавычки. «INSERT INTO TotalPlayerName (имя игрока) VALUES (« + playerName + »')»; – dbugger

+0

b) Использовать параметры – dbugger

+0

Почему людям очень сложно использовать 'Google' @, если бы вы могли найти свой ответ довольно легко, выполнив поиск в Google по тому, как построить инструкцию INSERT SQL', также используйте отладчик .. показать все соответствующие код и показать нам, как выглядит строка подключения .. wrap your ExecuteNonQuery вокруг try {} catch {} – MethodMan

ответ

3

правильный код, чтобы сделать вашу задачу является

string cmdText = "INSERT INTO TotalPlayerName ([Player Name]) VALUES(?)"; 

using(OleDbConnection connection = new OleDbConnection(...)) 
using(OleDbCommand command = new OleDbCommand(cmdText, connection)) 
{ 
    connection.Open(); 
    command.Parameters.Add("@p1", OleDbType.VarWChar).Value = textBox[i].Text; 
    int result = command.ExecuteNonQuery(); 
    if(result > 0) 
     MessageBox.Show("Record Inserted"); 
    else 
     MessageBox.Show("Failure to insert"); 
} 

Этот подход устраняет три проблемы:

  • соединения и команды объект Sh ульд быть утилизированы в конце (см, используя заявление)
  • Каждое значение, которое нужно передать в запрос должен быть принят в качестве параметра
  • Если имя поля (или таблицы) имеет пробелы, вы должны заключить это квадратные скобки

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

string cmdText = @"INSERT INTO TotalPlayerName ([Player Name], FieldB) 
       VALUES(?, ?)"; 

command.Parameters.Add("@p1", OleDbType.VarWChar).Value = textBox[i].Text; 
command.Parameters.Add("@p2", OleDbType.VarWChar).Value = "ValueForFieldB"; 

Только не забудьте строго следовать порядку из? когда вы добавляете свои значения параметров

+1

(+1) от меня, так как вы исправили многие проблемы, которые имели исходный код, и вы поймали меня, когда я писал о них :) Поэтому нет причин переписывать их в моем ответе. – Christos

+0

все еще не работает для меня, мне нужно добавить больше?? для других полей в таблице? поле, в которое я хочу вставить его, является вторым, если это помогает – Alby

+0

Если в вашей таблице больше, чем это поле (за исключением столбцов Autonumber), и эти поля не принимают значения NULL, вам необходимо предоставить им некоторое значение. Проверьте структуру вашей таблицы в MS-Access для любого поля с обязательным свойством «Да» – Steve

Смежные вопросы