il problema sta nel fatto che istanzi l'OleDbDataAdapter a livello di classe una volta sola e lo annulli al termine del metodo LoadData
codice:
Dim objDataAdapter As New OleDbDataAdapter()
[...]
' Clean up
objDataAdapter = Nothing
objDataAdapter = Nothing
consiglio spassionato: gestisci l'evento Load e Closing della form principale in cui nel Load istanzi l'oggetto objConnection e apri la connessione al db; nel Closing chiudi la connessione al db.
codice:
Imports System.Data
Imports System.Data.OleDb
Public Class ArticoliPage
' Percorso del DataBase (db.mdb)
Private PercorsoDB As String = "C:\db1.mdb"
' Stringa di Connessione
Dim objConnection As OleDbConnection
Dim objDataAdapter As OleDbDataAdapter
Dim objDataSet As DataSet
Private Sub ArticoliPage_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
' Open db connction
objConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & PercorsoDB)
objConnection.Open()
LoadData()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub ArticoliPage_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
Try
' Close db connection
objConnection.Close()
Catch ex As Exception
End Try
End Sub
Private Sub LoadData()
objDataAdapter = New OleDbDataAdapter()
objDataAdapter.SelectCommand = New OleDbCommand()
objDataAdapter.SelectCommand.Connection = objConnection
objDataAdapter.SelectCommand.CommandText = "Select * from Articoli"
objDataAdapter.SelectCommand.CommandType = CommandType.Text
' Fill
objDataAdapter.Fill(objDataSet, "Articoli")
' Set datagridview properties
DataGridView1.AutoGenerateColumns = True
DataGridView1.DataSource = objDataSet
DataGridView1.DataMember = "Articoli"
' Change Column Name anfd width
DataGridView1.Columns(0).Visible = False
DataGridView1.Columns(1).HeaderText = "Codice"
DataGridView1.Columns(1).Width = 150
DataGridView1.Columns(2).HeaderText = "Descrizione"
DataGridView1.Columns(2).Width = 250
' Clean up
objDataAdapter = Nothing
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim objCommand As OleDbCommand = New OleDbCommand()
objCommand.Connection = objConnection
objCommand.CommandText = "insert into Articoli" & _
"(articolo,descrizione,prezzo,misura) " & _
"values(articolo, descrizione, prezzo, misura);"
' Set Variables
objCommand.Parameters.AddWithValue("articolo", TBCodice.Text)
objCommand.Parameters.AddWithValue("descrizione", TBDescrizione.Text)
objCommand.Parameters.AddWithValue("prezzo", TBPrezzo.Text)
objCommand.Parameters.AddWithValue("misura", TBMisura.Text)
' Execute Command
Try
objCommand.ExecuteNonQuery()
MessageBox.Show("Inserimento eseguito con successo")
LoadData()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
End Class