2015-07-24 2 views
0

Синтаксическая ошибка в вставке в оператор возникает, когда я пытаюсь обновить базу данных MS Access.Синтаксическая ошибка в вставке в оператор. C#

  • Имя базы данных = студент
  • Имя таблицы = студент таблица

Код:

private void button1_Click(object sender, EventArgs e) 
{   
     connection.Open(); 
     OleDbCommand command = new OleDbCommand(); 
     command.Connection = connection; 
     command.CommandText = "INSERT INTO student table([Name],[Class])" + "values('" + textBox1 + "','" + textBox2 + "')"; 
     connection.Close(); 
     command.ExecuteNonQuery(); 
     MessageBox.Show("Data Saved");   
} 
+0

Вы должны вызвать свойство текста в текстовом поле, чтобы получить строковое значение, например, TextBox1.Text. –

+0

Является ли имя таблицы 'Student Table' или' Student'? –

ответ

3
  • первый вам нужно использовать textBox1.Text и textBox2.Text вместо textBox1 и textBox2 соответственно.

  • 2nd не закрывайте соединение перед выполнением команды.

  • 3-е использование параметров.

Так, чтобы подвести итог:

OleDbCommand command = new OleDbCommand(); 
command.Connection = connection; 
command.CommandText = "INSERT INTO [student table] ([Name],[Class]) values(@par1,@par2)"; 
command.Paramaters.Add("@par1",textBox1.Text); 
command.Paramaters.Add("@par2",textBox2.Text);  
command.ExecuteNonQuery(); 
connection.Close(); 
+0

Спасибо, что моя проблема решена –

5

Если имя таблицы больше, чем одно слово, вы должны использовать его с квадратом скобки, такие как [student table]

Но, что более важно, вы должны всегда использование parameterized queries. Этот тип конкатенаций строк открыт для атак SQL Injection.

И используйте using statement для автоматического управления вашими соединениями и командами вместо вызова методов Close или Dispose вручную.

private void button1_Click(object sender, EventArgs e) 
{ 
    using(var connection = new OleDbConnection(connection)) 
    using(var command = connection.CreateCommand()) 
    { 
     command.CommandText = @"INSERT INTO [student table]([Name],[Class]) 
           VALUES(?, ?)"; 
     command.Parameters.AddWithValue("?", textBox1); 
     command.Parameters.AddWithValue("?", textBox2); 

     connection.Open(); 
     int count = command.ExecuteNonQuery(); 
     if(count > 0) 
      MessageBox.Show("Data Saved"); 
    }   
} 

Кстати, я подозреваю, что если эти textBox1 и textBox2 являются TextBox не является переменной, вы должны использовать их с .Text свойствами.

+0

, не могли бы вы предоставить мне полный код, где я могу добавить имя и адрес в базу данных доступа MS, используя SAVE botton? –

+0

@RonetTamang Проверьте мое обновление. –

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