2013-08-14 59 views
5

Ngày tốt lành. Tôi đang cố gắng tạo một trang đăng ký và có thông tin được lưu trữ trong cơ sở dữ liệu. Tôi đã tạo cơ sở dữ liệu bằng Microsoft Access. Tôi nhận được:Lỗi cú pháp trong câu lệnh INSERT INTO sử dụng OleDb

Lỗi cú pháp trong INSERT INTO tuyên bố

mỗi khi tôi nhấn nút 'Đăng ký'. Tôi đã thử tìm kiếm trên mạng với các vấn đề tương tự và tìm thấy một số thứ như "Reserved Words" và "Nó phải là khoảng cách của bạn". Tôi đã làm những điều đó và nó vẫn cho tôi lỗi. Tui bỏ lỡ điều gì vậy?

Đây là mã:

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

các loại cột trong bảng ElemData là gì? – Damith

+0

Hiện tại họ đang 'TEXT'. – Meruru

Trả lời

5

ClassSection là cả hai reserved words. Đính kèm chúng trong dấu ngoặc vuông như bạn đã làm cho các từ dành riêng [Password][Name].

Trang đó bao gồm liên kết cho số Database Issue Checker Utility của Allen Browne. Nếu bạn có phiên bản Office bao gồm Access, bạn có thể tải xuống tiện ích đó và sử dụng nó để kiểm tra tệp Access db của bạn cho các tên đối tượng sự cố khác.

+0

Cảm ơn bạn rất nhiều! Nó hoạt động ngay bây giờ. Tôi đoán tôi không nên chỉ tìm kiếm một danh sách các từ dành riêng chỉ vì một từ tôi tìm thấy không bao gồm những từ này. Cảm ơn bạn đã liên kết. Vì tôi không thể đưa ra danh tiếng, tôi sẽ chỉ bình luận ở đây để thông báo cho bạn rằng nó đã hoạt động. – Meruru

2

thay đổi sql của bạn như sau

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

Các OLE DB .NET Provider không hỗ trợ đặt tên các tham số để thông qua tham số để một câu lệnh SQL hoặc một thủ tục được lưu trữ được gọi là bởi một OleDbCommand khi CommandType được đặt thành Văn bản. Trong trường hợp này, phải sử dụng dấu chọn dấu chấm hỏi (?) (?).

+0

Nó vẫn cho tôi lỗi tương tự. Chúng tôi đã sử dụng mã này trong lớp và nó hoạt động mặc dù bảng được sử dụng chỉ có 4 cột. ElemData ở đây có khoảng 48 cột, hầu hết là 'Subject1', 'Subject2' và cứ tiếp tục như vậy. Bây giờ tôi tự hỏi nếu bảng có 48 cột đang gây ra điều này bởi vì tôi để lại một số cột trống như đã thấy trên mã. – Meruru