2013-08-14 14 views
5

Dzień dobry. Próbuję utworzyć stronę rejestracji i przechowywać informacje w bazie danych. Zrobiłem bazę danych za pomocą Microsoft Access. I otrzymujemy:Błąd składni w instrukcji INSERT INTO przy użyciu OleDb

błąd składni w instrukcji INSERT INTO

każdym razem, kiedy nacisnąć przycisk 'Zarejestruj'. Próbowałem już szukać w sieci z podobnymi problemami i znalazłem kilka rzeczy takich jak "Reserved Words" i "To musi być twój dystans". Zrobiłem to i nadal daje mi błąd. Czy czegoś brakuje?

Oto kod:

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

jakie są typy kolumn w tabeli ElemData? – Damith

+0

Obecnie są w "TEKSTIE". – Meruru

Odpowiedz

5

Class i Section są zarówno reserved words. Ułóż je w nawiasy kwadratowe, tak jak zrobiono dla słów zarezerwowanych [Password] i [Name].

Ta strona zawiera link do Allen Browne's Database Issue Checker Utility. Jeśli masz wersję pakietu Office, która zawiera program Access, możesz pobrać to narzędzie i użyć go do sprawdzenia pliku db dostępnego dla innych nazw obiektów powodujących problemy.

+0

Dziękuję bardzo! Teraz zadziałało. Sądzę, że nie powinienem szukać tylko jednej listy zarezerwowanych słów tylko dlatego, że ta, którą znalazłem, nie zawierała tych słów. Dziękuję również za link. Ponieważ nie mogę dać reputacji, po prostu skomentuję tutaj, aby powiadomić Cię, że zadziałało. – Meruru

2

zmiana programu SQL jak poniżej

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

OLE DB .NET Provider nie obsługuje nazwanych parametrów przechodzącej parametrów do SQL lub procedura składowana wywoływana przez OleDbCommand, gdy parametr CommandType jest ustawiony na tekst. W takim przypadku należy użyć symbolu zastępczego (?).

+0

Nadal daje mi ten sam błąd. Użyliśmy tego kodu w klasie i działa, chociaż używana tabela ma tylko 4 kolumny. ElemData ma tutaj około 48 kolumn, z których większość to "Subject1", "Subject2" i tak dalej. Teraz zastanawiam się, czy tabela o 48 kolumnach powoduje to, ponieważ zostawiłem niektóre kolumny puste, jak widać na kodzie. – Meruru

Powiązane problemy