Agiungere record db access

domenica 15 agosto 2010 - 18.37
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  Windows XP  |  Visual Studio Express  |  Access (.mdb)  |  Office 2003  |  Firefox

tonino73 Profilo | Newbie

salve, sono da poco alle prese con vb 2005 express, prima qualche cosa con il vb 6 l'ho fatta, ma con ado.net tutto è differente. Allora ho incominciato a vedere un po sui forum, tra cui anche questo, qualche linea guida per connettermi al database e apportare delle modifiche alle tabelle.In questo caso specifico sto facendo delle prove su una sola tabella e con il metodo disconnesso. ora vi posto il listato e se potete darmi una dritta di perchè mi da un errore. vi ringrazio anticipatamente.

Imports System.Data.OleDb
Imports system.Data.DataRow


Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Impostazione della connessione al Database.
Dim strConn As String
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = C:\Documents and Settings\Antonino\Documenti\Visual Studio 2005\Projects\squesito.mdb"
Dim cn As New OleDb.OleDbConnection(strConn)
' Comando SQL per il recupero dei record.
Dim sql As String
sql = "SELECT citta"
sql = sql & " FROM tcitta ORDER BY citta"
Dim cmd = New OleDb.OleDbCommand(sql,cn)
' Assegnamo il comando al DataAdapter.
Dim da As New OleDb.OleDbDataAdapter()
da.SelectCommand = cmd
' Apriamo la connessione.
cn.Open()

Dim ds As New DataSet("dsCitta") ' Il nome del DataSet è opzionale
' Specifichiamo al DataAdapter di copiare, oltre ai dati, anche
' le informazioni relative alle chiavi definite nella tabella

da.MissingSchemaAction = MissingSchemaAction.AddWithKey

' Riempiamo il DataSet specificando il nome della tabella.
ds.Clear()
da.Fill(ds, "tcitta")
ComboBox1.DataSource = ds.Tables("tcitta")
ComboBox1.DisplayMember = ds.Tables("tcitta").Columns("citta").ToString

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim ds As New DataSet("dsCitta") ' Il nome del DataSet è opzionale
Dim da As New OleDb.OleDbDataAdapter()
Dim tblcitta As New DataTable()
tblcitta = ds.Tables("tcitta") 'Referenzia la tabella Clienti contenuta nel DataSet

' Esempio di inserimento nuovo record.
Dim NewRec As DataRow

NewRec = tblcitta.NewRow

NewRec("citta") = TextBox1.Text
tblcitta.Rows.Add(NewRec)
da.Update(ds, "tcitta")

ComboBox1.Refresh()

End Sub
End Class

l'errore che mi da sulla riga NewRec = tblcitta.NewRow è System.NullReferenceException non è stata gestita
"Riferimento a un oggetto non impostato su un'istanza di oggetto."
dove sbaglio?

sanbiz Profilo | Senior Member

>Dim ds As New DataSet("dsCitta") ' Il nome del DataSet è opzionale
>Dim da As New OleDb.OleDbDataAdapter()
>Dim tblcitta As New DataTable()
>tblcitta = ds.Tables("tcitta") 'Referenzia la tabella Clienti contenuta nel DataSet
>
> ' Esempio di inserimento nuovo record.
> Dim NewRec As DataRow
>
> NewRec = tblcitta.NewRow
>
>l'errore che mi da sulla riga NewRec = tblcitta.NewRow è System.NullReferenceException
>non è stata gestita
>"Riferimento a un oggetto non impostato su un'istanza di oggetto."
>dove sbaglio?


Il problema è che tblcitta NON è referenziato, infatti quando scrivi tblcitta = ds.Tables("tcitta") in realtà non associ nulla perchè il dataset è vuoto (ds.tables.count=0).
Avresti dovuto popolarlo, utilizzando il dataadapter associandovi una connection ed una select 8o un datacommand) appropriati ed utilizzando la proprietà FILL del dataadapter per popolare la tabella:
Es.
Dim da As New OleDb.OleDbDataAdapter("Select * from ...", OleDb.OleDbConnection)
da.Fill(ds, "tcitta")

Inoltre è inutile dichiarare "Dim tblcitta As New DataTable()" se alla riga dopo vi associ una tabelle già esistente.
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

tonino73 Profilo | Newbie

ho fatto qualche modifica fammi sapere se va tutto liscio, anche perchè nella sub den button1 mi da qualche problema con il command

Imports System.Data.OleDb
Imports system.Data.DataRow


Public Class Form1
Private ds As New DataSet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

' Impostazione della connessione al Database.
Dim strConn As String
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = C:\Documents and Settings\Antonino\Documenti\Visual Studio 2005\Projects\squesito.mdb"

Dim cn As New OleDb.OleDbConnection(strConn)
' Comando SQL per il recupero dei record.

Dim sql As String
sql = "SELECT citta"
sql = sql & " FROM tcitta ORDER BY citta"

Dim cmd = New OleDb.OleDbCommand(sql, cn)
' Assegnamo il comando al DataAdapter.
Dim da As New OleDb.OleDbDataAdapter()
da.SelectCommand = cmd
' Apriamo la connessione.
cn.Open()

' Specifichiamo al DataAdapter di copiare, oltre ai dati, anche
' le informazioni relative alle chiavi definite nella tabella
da.MissingSchemaAction = MissingSchemaAction.AddWithKey
' Riempiamo il DataSet specificando il nome della tabella.
ds.Clear()
da.Fill(ds, "tcitta")
ComboBox1.DataSource = ds.Tables("tcitta")
ComboBox1.DisplayMember = ds.Tables("tcitta").Columns("citta").ToString





End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim da As New OleDb.OleDbDataAdapter()
Dim tblcitta As New DataTable()
tblcitta = ds.Tables("tcitta") ' Referenzia la tabella Clienti contenuta nel DataSet
'inserimento nuovo record.
Dim NewRec As DataRow
NewRec = tblcitta.NewRow
NewRec("citta") = TextBox1.Text
ds.Tables("tcitta").Rows.Add(NewRec)
da.Fill(ds, "tcitta")
da.Update(ds, "tcitta")
ComboBox1.Refresh()

End Sub
End Class
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5