2015-09-09 4 views
0

VB.NET не может вставлять данные в таблицу базы данных MS Access.Не удается вставить в базу данных MS Access из VB.NET

Что я могу изменить в этом коде для вставки данных в таблицу?

Сообщения об ошибках:

Необработанное исключение типа 'System.InvalidOperationException' произошло в System.Data.dll

Дополнительная информация: ExecuteNonQuery: Свойство Connection не был инициализирован.

Private Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click 

     Dim connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=loginUser.mdb;") 

     Dim dt As New DataTable 
     Dim da As New OleDbDataAdapter 

     Try 
      connection.Open() 
      Dim cmd As New OleDbCommand 
      cmd.CommandText = "INSERT INTO Staff (ID, username, password) VALUES (@id, @username, @password)" 
      cmd.Parameters.AddWithValue("@id", 101) 
      cmd.Parameters.AddWithValue("@username", txtUsername.Text) 
      cmd.Parameters.AddWithValue("@password", txtPassword.Text) 

      cmd.ExecuteNonQuery() 
      MsgBox("Add") 
     Catch ex As Exception 
     Finally 
      connection.Close() 
     End Try 


    End Sub 
+0

проводки точного сообщения об ошибке, которое происходит, когда вставка может оказаться полезной для других. – Paul

+0

Необработанное исключение типа «System.InvalidOperationException» произошло в System.Data.dll Дополнительная информация: ExecuteNonQuery: Свойство Connection не было инициализировано. – user2534252

+0

Пароль является зарезервированным словом и должен быть псевдонимом или экранированным. См. Http://stackoverflow.com/tags/ms-access/info – Fionnuala

ответ

0

Привет вам необходимо инициализировать connection к cmd.Connection собственности, изменить код ниже этого:

cmd.Connection = connection 
    con.Open() 
    cmd.ExecuteNonQuery() 
0

Вы не говоря уже о вашем connection при создании/выполнения команды. Используйте ниже кода вместо ...

Private Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click 

     Dim connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=loginUser.mdb;") 

     Dim dt As New DataTable 
     Dim da As New OleDbDataAdapter 

     Try 
      Dim cmd As New OleDbCommand("INSERT INTO Staff (ID, username, password) VALUES (@id, @username, @password)",connection) 
      connection.Open() 
      cmd.Parameters.AddWithValue("@id", 101) 
      cmd.Parameters.AddWithValue("@username", txtUsername.Text) 
      cmd.Parameters.AddWithValue("@password", txtPassword.Text) 

      cmd.ExecuteNonQuery() 
      MsgBox("Add") 
     Catch ex As Exception 
     Finally 
      connection.Close() 
     End Try 


End Sub 
0

Причина исключения вы не назначайте заявленное соединение с командой объекта

Таким образом, вы могли бы изменить существующую команду декларацию

Dim cmd As New OleDbCommand("", connection)

или

Dim cmd As New OleDbCommand 
cmd.connecction = connection 

Я просто обновил свой код: см следующего

Dim dt As New DataTable 
Dim da As New OleDbDataAdapter 
Using OleDbConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=loginUser.mdb;") 
      Dim cmd As New OleDbCommand("", OleDbConn) 
      With cmd 
       OleDbConn.Open() 
       .CommandText = "INSERT INTO Staff (ID, username, password) VALUES (@id, @username, @password)" 
       .Parameters.AddWithValue("@id", 101) 
       .Parameters.AddWithValue("@username", "adfda") 
       .Parameters.AddWithValue("@password", "dfsd") 
       .ExecuteNonQuery() 
       MsgBox("Add") 
      End With 
     End Using 

Вы можете использовать Using блок для обработки соединения, соединение автоматически закроемся в конце помощью блока