2013-02-12 3 views
8

У меня есть база данных (я использую MS ACCESS) У меня есть этот код вставки, я могу прочитать данные, но получил ошибки при написании, я следовать инструкциям, но это не сработало вот мой кодOleDB ошибка команды 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(); 
      } 

И я всегда получил эту ошибку,

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

Когда вы отлаживаете, что такое значение 'cmd.CommandText', прежде чем вы вызываете' ExecuteNonQuery() '? – Arran

ответ

9

Вы определили параметры @Username и @Password, но никогда не использовали их в своей команде sql.

Как насчет?

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(); 

Также вы должны использовать Password в квадратных скобках на вашей команды SQL, как [Password], потому что это в MS Access reserved keyword.

Если вы этого не сделаете, это может привести к ошибке;

Неправильный синтаксис около ключевого слова "Password"

+0

спасибо, это работает :) – Pyromancer

+1

@AlfredSanz Приятно это слышать. –

1

Попробуйте изменить этот путь

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

пространство в вашем заявлении на вставку:

ssword)" + "VALUES ('" 

например, в вашем заявлении, которое вы конкатенировали, не допуская пробела.

Должно быть:

ssword)" + " VALUES ('" 

Например.

0

Вы можете иметь это:

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

Я надеюсь, что это будет работать.

Cheer-up.

Смежные вопросы