2013-08-14 11 views
5

İyi günler. Bir kayıt sayfası oluşturmaya ve bilgileri bir veritabanında depolamaya çalışıyorum. Microsoft Access'i kullanarak veritabanını yaptım. Ben alıyorum: INSERTINSERT INTO deyimindeki sözdizimi hatası OleDb

sözdizimi hatası deyimi

Ben 'Kayıt' düğmesini her zaman INTO. Ağda benzer problemlerle arama yapmayı denedim ve "Ayrılmış Kelimeler" ve "Aralığınız olmalı" gibi bazı şeyler buldum. Bunu yaptım ve hala bana hata veriyor. Bir şey mi eksik?

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

ElemData tablosundaki sütun türleri nelerdir? – Damith

+0

Onlar şu anda 'TEXT'. – Meruru

cevap

5

Class ve Section hem reserved words bulunmaktadır. Ayrılmış kelimeler [Password] ve [Name] için yaptığınız gibi bunları köşeli parantez içine alın.

Bu sayfa, Allen Browne'ın Database Issue Checker Utility için bir bağlantı içerir. Access'i içeren bir Office sürümünüz varsa, bu yardımcı programı karşıdan yükleyebilir ve Access db dosyanızı diğer sorunlu nesne adlarını incelemek için kullanabilirsiniz.

+0

Çok teşekkür ederim! Şimdi çalıştı. Sanırım sadece bir tane ayrılmış kelime listesi aramamalıyım, çünkü bulduğum tek şey bunları içermiyordu. Link için de teşekkürler. İtibarını veremediğimden, sadece çalıştığınızı bildirmek için buraya yorum yapacağım. – Meruru

2

değişiklik aşağıda

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 sağlayıcı yapar değil bir SQL deyimine parametreleri geçirerek adını parametreleri destekleyecek veya gibi sql: Burada

kodudur CommandType Metin olarak ayarlandığında, OleDbCommand tarafından çağrılan saklı yordam. Bu durumda, soru işareti (?) Yer tutucu kullanılmalıdır.

+0

Yine de bana aynı hatayı veriyor. Bu kodu sınıfta kullandık ve kullanılan tablo sadece 4 sütun içeriyor olsa da çalışıyor. ElemData burada, çoğu 'Subject1', 'Subject2' vb. Olmak üzere yaklaşık 48 sütun içeriyor. Şimdi, 48 sütun içeren tablonun buna neden olup olmadığını merak ediyorum çünkü kodda görüldüğü gibi bazı sütunları boş bıraktım. – Meruru

İlgili konular