2014-12-09 4 views
0

Я новичок в vb.net я получил следующую ошибку при выполнении вставки-заявление«Ошибка синтаксиса в INSERT INTO заявление»

syntax error in INSERT INTO statement 

Вот мой код:

Private Sub cmdadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdadd.Click 
     Try 
      Dim sql As String = " INSERT INTO [Login1] ([ID],[Username],[Password])" & _ 
" VALUES(?,?,?)" 

      Dim cmd As New OleDbCommand 
      With cmd 
       .Connection = con 
       .CommandText = sql 
       .Parameters.AddWithValue("?", txtid) 
       .Parameters.AddWithValue("?", txtuser) 
       .Parameters.AddWithValue("?", txtpass) 
       .ExecuteNonQuery() 
      End With 
      MsgBox("The Data Has Been Added") 

     Catch ex As Exception 
      MsgBox(ex.ToString) 
     End Try 
    End Sub 

Может ли кто-нибудь мне помочь?

ответ

1

Попробуйте использовать sql parameter names

Private Sub cmdadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdadd.Click 
    Try 
     Dim sql As String = " INSERT INTO [Login1] ([ID],[Username],[Password])" & _ 
" VALUES(@ID,@Username,@Password)" 

     Dim cmd As New OleDbCommand 
     With cmd 
      .Connection = con 
      .CommandText = sql 
      .Parameters.AddWithValue("@ID", txtid) 
      .Parameters.AddWithValue("@Username", txtuser) 
      .Parameters.AddWithValue("@Password", txtpass) 
      .Open() 
      .ExecuteNonQuery() 
      .Close() 
     End With 
     MsgBox("The Data Has Been Added") 

    Catch ex As Exception 
     MsgBox(ex.ToString) 
    End Try 
End Sub 

Обратите внимание, что: Вы должны правильно закрыть соединение после того, как вы их используете. Поэтому следующий код может быть лучше.

Private Sub InsertLogin() 
    Dim sql As String = " INSERT INTO [Login1] ([ID],[Username],[Password])" & _ 
     " VALUES(@ID,@Username,@Password)" 

    Using con As New OleDbConnection(ConnectionStringHERE) 
     Using cmd As New OleDbCommand 
      Dim cmd As New OleDbCommand 
      cmd.Connection = con 
      cmd.CommandText = sql 
      cmd.Parameters.AddWithValue("@ID", txtid) 
      cmd.Parameters.AddWithValue("@Username", txtuser) 
      cmd.Parameters.AddWithValue("@Password", txtpass) 
      con.Open() 
      cmd.ExecuteNonQuery() 
     con.Close() 
     End Using 
    End Using 

End Sub 

    Private Sub cmdadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdadd.Click 
     Try 
      InsertLogin() 
      MsgBox("The Data Has Been Added") 
     Catch ex As Exception 
      MsgBox(ex.ToString) 
     End Try 
    End Sub 

Здесь я использовал cmd. синтаксис, это ничем не отличается от использования With.

+0

Я не знаком с использованием 'ExecuteNonQuery' в' With'statement. Открывает ли это открытие соединение? Не будет ли исключение: 'Текущее состояние соединения закрыто ...'? – User999999

+0

С синтетическим сахаром. Это ничем не отличается от cmd.Connection cmd.CommandText –

+0

Так что все равно будет создано исключение. Поскольку OleDbCommand нуждается в открытом соединении перед выполнением 'ExecuteNonQuery' – User999999

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