2013-02-12 46 views
8

Tôi có một cơ sở dữ liệu (tôi sử dụng MS ACCESS) tôi có mã chèn này, tôi có thể đọc dữ liệu nhưng bị lỗi khi viết, tôi làm theo hướng dẫn nhưng nó đã không làm việc đây là mã của tôiOLEDB lỗi lệnh INSERT

OleDbConnection con = new OleDbConnection(@" provider=Microsoft.ace.Oledb.12.0; data source=\\sisc-erelim\4_Printing\VTDB\DB\VirginiTEADB2.accdb; Persist Security Info=False"); 

private void button1_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       OleDbCommand cmd = new OleDbCommand(); 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = "INSERT INTO Accountstbl (Username, Password)" + "VALUES ('" + textBox1.Text + "','" + textBox2.Text + "')"; 
       cmd.Parameters.AddWithValue("@Username", textBox1.Text); 
       cmd.Parameters.AddWithValue("@Password", textBox2.Text); 
       cmd.Connection = con; 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 
       textBox1.Text = ex.ToString(); 
      } 

Và tôi luôn luôn có lỗi này,

System.Data.OleDb.OleDbException: Syntax error in INSERT INTO statement. 
    at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) 
    at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) 
    at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) 
    at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) 
    at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) 
    at System.Data.OleDb.OleDbCommand.ExecuteNonQuery() 
    at VirginiTEAcorp.Form3.button1_Click(Object sender, EventArgs e) in C:\Documents and Settings\12-014s\My Documents\applications\Database\WindowsFormsApplication1\Form3.cs:line 34 
+1

Khi bạn gỡ lỗi, giá trị của 'cmd.CommandText' trước khi bạn gọi là 'ExecuteNonQuery()' là gì? – Arran

Trả lời

9

Bạn đã xác định các thông số @Username@Password nhưng bạn không bao giờ được sử dụng trong lệnh sql của mình.

Làm thế nào?

cmd.CommandText = "INSERT INTO Accountstbl (Username, [Password]) VALUES (@Username, @Password)"; 
cmd.Parameters.AddWithValue("@Username", textBox1.Text); 
cmd.Parameters.AddWithValue("@Password", textBox2.Text); 
cmd.Connection = con; 
con.Open(); 
cmd.ExecuteNonQuery(); 

Ngoài ra, bạn nên sử dụng Password trong ngoặc vuông trên lệnh sql của bạn như [Password] vì nó là một reserved keyword trong MS Access.

Nếu bạn không làm như vậy có thể gây ra lỗi như;

cú pháp sai gần từ khóa "mật khẩu"

+0

cảm ơn, nó hoạt động :) – Pyromancer

+1

@AlfredSanz Tốt để nghe nó. –

1

Cố gắng thay đổi theo cách này

cmd.CommandText = "INSERT INTO Accountstbl (Username, Password) VALUES (@Username,@Password)"; 
0

Một không gian bắt buộc trong tuyên bố chèn của bạn:

ssword)" + "VALUES ('" 

ví dụ như trong tuyên bố của bạn mà bạn đã ghép mà không cho phép một khoảng trống.

nên là:

ssword)" + " VALUES ('" 

Ví dụ.

0

Bạn có thể có điều này:

cmd.CommandText = "INSERT INTO Accountstbl (Username, [Password]) VALUES (@Username,@Password)"; 
      cmd.Parameters.AddWithValue("@Username", textBox1.Text); 
      cmd.Parameters.AddWithValue("@Password", textBox2.Text); 

Tôi hy vọng điều này sẽ làm việc.

Cổ vũ.

Các vấn đề liên quan