La connessione va aperta all'esterno del Try, in questo caso, poiché c'è un Finally che ne garantisce la chiusura (e ovviamente può chiudere una connessione solo se questa è stata aperta), a meno di non aggiungere o modificare codice o strutturare la parte di gestione dell'errore in modo differente, o inserendo ad esempio il controllo dello stato della connessione nel blocco Finally.
Per quanto riguarda il problema specifico, se si tratta di inserire un semplice record, credo che DataSet, Adapter, ecc. non siano strettamente necessari: basta invocare il metodo ExecuteNonQuery dell'oggetto OleDbCommand per eseguire il comando e ottenere il numero di record inseriti nella tabella (direi 1).
Piuttosto, suggerirei di evitare la specificazione di parametri "in linea" con lo statement SQL della query, sostituendo il concatenamento delle stringhe con valori parametri, identificati dal segnaposto "?" (nel caso di OLE DB e delle classi che appartengono al namespace System.OleDb); in questo modo, anche quando si tratta di valori più "delicati" e soggetti ad impostazioni internazionali, come data/ora e valori a virgola mobile, si delega alla libreria il compito di effettuare le dovute conversioni, eludendo inoltre possibili intrusioni di SQL Injection.
Un pezzo di codice (non verificato) per esemplificare il tutto:
codice:
' Crea una nuova connessione ai dati
Dim MyConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\enzo.ENZO-59B7B5DDEE\Documenti\Visual Studio 2005\Projects\prova\prova\Db1.mdb;Persist Security Info=False")
' Apre la connessione ai dati
MyConnection.Open()
Try
' Crea il comando per l'inserimento dei dati
Dim MyCommand As New OleDbCommand("INSERT INTO UTENTI (Utente, Password) VALUES (?, ?)", MyConnection)
' Definisce i parametri del comando
Dim MyParam As OleDbParameter
' Valorizza il parametro con il nome dell'utente
MyParam = New OleDbParameter("Utente", OleDbType.VarChar, 50)
MyParam.Value = Utente
MyCommand.Parameters.Add(MyParam)
' Valorizza il parametro con la password
MyParam = New OleDbParameter("Password", OleDbType.VarChar, 32)
MyParam.Value = Password
MyCommand.Parameters.Add(MyParam)
' Esegue il comando di inserimento
MyCommand.ExecuteNonQuery()
Finally
' Garantisce la chiusura della connessione ai dati
MyConnection.Close()
End Try
Il codice è a solo scopo esemplificativo: non l'ho mandato in esecuzione e non ne ho verificato la correttezza, serve solo a rendere l'idea.
P.S.: attento che alcuni DB considerano l'identificatore Password una parola chiave.
Ciao!