2010-11-21 4 views
1

당신의 도움이 필요합니다. 오류가 발견되지 않습니다. 응급 상황입니다. 내 방법은 이고 오류 메시지는 "구문 오류 INSERT INTO 문"입니다. 이미지는 어떻게 수정합니까?이 메서드 단추에 구문 오류가 있습니다. C#?

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

을' – Fionnuala

+0

는 어떻게 더 설명 할 수 있습니까? VALUES (?,?,?,?)에 대한 값의 일부를 변경하는 것을 의미합니다. – peggalvan

+3

remou는 Access가 명명 된 매개 변수 (예 : @meta)를 지원하지 않는다고 생각합니다. –

답변

1

오류 메시지가 분명하다, 아무리 그 구조 : INSERT INTO 문에서 오류가 발생했습니다.

나는 어떤 SQL 구문의 문제는 그래서 []로 탈출 시도, 그것은 예약어에 대해 추측합니다 보지 않습니다이되고 명명 된 매개 변수의 Remou의 관찰과 결합

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

List : http://support.microsoft.com/kb/248738/es – Fionnuala

+0

좋습니다, Real은 거기에 있고 메타는 없습니다. 나는 아직도 그것을 피할 것이다. –

+0

대단히 고마워요!, 아직도 예외를 제어 할 수있는 방법이 있습니까? System.NullReferenceException : 오브젝트 참조가 오브젝트의 인스턴스로 설정되지 않았습니다. – peggalvan

0

OLEDB 공급자를 사용함에 따라 "?" 매개 변수의 상징. (?,?,?,?) : 다음과 같은 쿼리를 시도 할 수 있습니다 내가 값이`값을 읽어야 상당히 확신

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

모든 답변을 주셔서 감사합니다. – peggalvan

관련 문제