2013-08-14 31 views
5

Buona giornata. Sto cercando di creare una pagina di registrazione e di avere le informazioni memorizzate in un database. Ho creato il database utilizzando Microsoft Access. Ottengo:Errore di sintassi nell'istruzione INSERT INTO con OleDb

Errore di sintassi nell'istruzione INSERT INTO

ogni volta che si preme il pulsante 'Registrati'. Ho già provato a cercare in rete con problemi simili e ho trovato alcune cose come "Parole riservate" e "Deve essere la tua spaziatura". Li ho fatti e mi dà ancora l'errore. Mi sto perdendo qualcosa?

Ecco il codice:

public void InsertRecord() 
{ 
    OleDbCommand cmd = new OleDbCommand("INSERT INTO ElemData(StudentID, [Password], [Name], Age, Birthday, Address, FatherName, MotherName, " + 
    "GuardianName, Class, Section, Email, PhoneNumber, MobileNumber) " + 
    "VALUES (@studentid, @password, @name, @age, @birth, @address, @father, @mother, @guardian, @classs, @section, @email, @phone, @mobile)", DBConnection.myCon); 
    cmd.Parameters.Add("@studentid", OleDbType.VarChar).Value = Studentid; 
    cmd.Parameters.Add("@password", OleDbType.VarChar).Value = Password; 
    cmd.Parameters.Add("@name", OleDbType.VarChar).Value = Name; 
    cmd.Parameters.Add("@age", OleDbType.VarChar).Value = Age; 
    cmd.Parameters.Add("@birth", OleDbType.VarChar).Value = Birth; 
    cmd.Parameters.Add("@address", OleDbType.VarChar).Value = Address; 
    cmd.Parameters.Add("@father", OleDbType.VarChar).Value = Father; 
    cmd.Parameters.Add("@mother", OleDbType.VarChar).Value = Mother; 
    cmd.Parameters.Add("@guardian", OleDbType.VarChar).Value = Guardian; 
    cmd.Parameters.Add("@classs", OleDbType.VarChar).Value = Classs; 
    cmd.Parameters.Add("@section", OleDbType.VarChar).Value = Section; 
    cmd.Parameters.Add("@email", OleDbType.VarChar).Value = Email; 
    cmd.Parameters.Add("@phone", OleDbType.VarChar).Value = Phone; 
    cmd.Parameters.Add("@mobile", OleDbType.VarChar).Value = Mobile; 
    if (cmd.Connection.State == ConnectionState.Open) 
    { 
     cmd.Connection.Close(); 
    } 
    DBConnection.myCon.Open(); 
    cmd.ExecuteNonQuery(); 
    DBConnection.myCon.Close(); 
} 
+0

quali sono i tipi di colonna nella tabella ElemData? – Damith

+0

Attualmente sono su "TESTO". – Meruru

risposta

5

Class e Section sono entrambi reserved words. Racchiudili tra parentesi quadre come hai fatto per le parole riservate [Password] e [Name].

Questa pagina include un collegamento per Allen Browne Database Issue Checker Utility. Se si dispone di una versione di Office che include Access, è possibile scaricare tale utilità e utilizzarla per esaminare il file Access DB per altri nomi di oggetti problema.

+0

Grazie mille! Ha funzionato ora. Immagino che non dovrei cercare solo una lista di parole riservate solo perché quella che ho trovato non le includeva. Grazie anche per il link. Dal momento che non posso dare la reputazione, mi limiterò a commentare qui per notificare che ha funzionato. – Meruru

2

cambiamento SQL, come di seguito

OleDbCommand cmd = new OleDbCommand("INSERT INTO ElemData ([StudentID], [Password], [Name], [Age], [Birthday], [Address], [FatherName], [MotherName], " + 
    "[GuardianName], [Class], [Section], [Email], [PhoneNumber], [MobileNumber]) " + 
    "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", DBConnection.myCon); 

.NET provider OLE DB non supportare parametri denominati per il passaggio di parametri a un'istruzione SQL o una procedura memorizzata chiamata da un 01DiOleDbCommand quando CommandType è impostato su Testo. In questo caso, è necessario utilizzare il segnaposto punto interrogativo (?).

+0

Mi dà ancora lo stesso errore. Abbiamo usato questo codice in classe e funziona anche se la tabella utilizzata ha solo 4 colonne. ElemData ha qui circa 48 colonne, la maggior parte delle quali è 'Subject1', 'Subject2' e così via. Ora mi chiedo se la tabella con 48 colonne sta causando questo perché ho lasciato alcune colonne vuote come visto sul codice. – Meruru

Problemi correlati