Синтаксическая ошибка в этом методе кнопка C #? - PullRequest
1 голос
/ 21 ноября 2010

Мне нужна ваша помощь, я не могу найти ошибку, это чрезвычайная ситуация, вот мой метод, и изображение ошибки говорит: «синтаксическая ошибка INSERT INTO Statement» вот изображение, как я могу это исправитьНезависимо от того, как его структура

http://img718.imageshack.us/img718/8864/erroruh.jpgalt text

private void btnCronograma_Click(object sender, EventArgs e)
{
  string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\amaury\\Documents\\TEC\\Septimo Semestre\\Administracion de proyectos de ingenieria de softwaere\\nuevo4\\nuevo\\Office\\Office\\Policias.accdb";
  using (OleDbConnection conn = new OleDbConnection(connstring))
   {
    conn.Open();

    string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, meta, real) VALUES(@idProyecto , @idMes , @meta, @real)";
    OleDbCommand cmd = new OleDbCommand(sql, conn);

  foreach (DataGridViewRow row in dataGridView8.Rows)
  {
    DataGridViewComboBoxCell combo3 = row.Cells["idProyecto"] as DataGridViewComboBoxCell;
    DataGridViewComboBoxCell combo4 = row.Cells["idMes"] as DataGridViewComboBoxCell;

    if (combo3 == null || combo4 == null)
    {
        MessageBox.Show("No se pudo convertir");
        continue;
    }

  int idProyecto = int.Parse(combo3.Value.ToString());
  int idMes = int.Parse(combo4.Value.ToString());
  int meta = int.Parse(row.Cells[3].Value.ToString());
  int real = int.Parse(row.Cells[4].Value.ToString());  

  cmd.Parameters.Clear();
  cmd.Parameters.AddWithValue("@idProyecto", idProyecto);
  cmd.Parameters.AddWithValue("@idMes", idMes);
  cmd.Parameters.AddWithValue("@meta", meta);
  cmd.Parameters.AddWithValue("@real", real);


  cmd.ExecuteNonQuery();
  }
}
}

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Сообщение об ошибке ясно: ошибка в инструкции INSERT INTO.

Я не видел никаких проблем с синтаксисом SQL, поэтому я думаю, что речь идет о резервном слове, попробуйте экранировать их с помощью []:

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
             VALUES(@idProyecto , @idMes , @meta, @real)";

В сочетании с наблюдением Рему именованных параметров он становится:

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
             VALUES(?, ?, ?, ?)";

И вы должны быть очень осторожны при добавлении параметров в правильном порядке.

0 голосов
/ 21 ноября 2010

Поскольку вы используете провайдера OLEDB, возможно, вам придется использовать "?" символ для параметров. Вы можете попробовать следующий запрос:

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
         VALUES(?, ? , ?, ?)";
...