Le basi

giovedì 08 novembre 2012 - 17.45
Tag Elenco Tags  VB.NET  |  Visual Studio 2010  |  Access (.mdb)

emilier Profilo | Newbie

[ADO.NET] [VB.NET]

Buongiorno a tutti.
Dopo tanti lavoretti fatti in .net ho deciso di buttarmi sul ADO.net ma mi ritrovo completamente spaesata.
Ho preso due libri ma non ne sto uscendo (ADO passo per passo...).

Semplifichiamo il mio problema.
Ho un db access su cui ho due tabelle:
- soggetti (con idsoggetto, nome, cognome, telefono, idprofessione). Es. 1, Mario, Rossi, 0166532485, 1
- professioni (con idprofessione, descrizione) Es. 1, Medico

Su vb.net ho due form:
- form1 in cui visualizzo i dati per ogni persona (dentro dei label), i tasti per andare avanti e indietro tra i record, un tasto che mi apre il form2 per inserire una nuova persona;
- form2 in cui ho i textbox per inserire i dati e il tasto "Inserisci" che dovrebbe fare l'update del mio database.

Bene. Per ora riesco a visualizzare i dati nel primo form e a muovermi tra i record.
Quando invece passo a dover aggiungere un nuovo record invece vado in pappa.
Come faccio a inserire i dati nelle due tabelle se non a mano con delle richieste sql "classiche"?

Il mio dataset "discende" da Access in cui in una query unisco le due tabelle
SELECT rubrica.nome, rubrica.cognome, rubrica.telefono, professioni.professione FROM professioni INNER JOIN rubrica ON professioni.[ID] = rubrica.[Idprofessione] ORDER BY rubrica.cognome;

Grazie
Emilie

algraps Profilo | Junior Member

>[ADO.NET] [VB.NET]
>
>Buongiorno a tutti.
>Dopo tanti lavoretti fatti in .net ho deciso di buttarmi sul
>ADO.net ma mi ritrovo completamente spaesata.
>Ho preso due libri ma non ne sto uscendo (ADO passo per passo...).
>
>Semplifichiamo il mio problema.
>Ho un db access su cui ho due tabelle:
>- soggetti (con idsoggetto, nome, cognome, telefono, idprofessione).
>Es. 1, Mario, Rossi, 0166532485, 1
>- professioni (con idprofessione, descrizione) Es. 1, Medico
>
>Su vb.net ho due form:
>- form1 in cui visualizzo i dati per ogni persona (dentro dei
>label), i tasti per andare avanti e indietro tra i record, un
>tasto che mi apre il form2 per inserire una nuova persona;
>- form2 in cui ho i textbox per inserire i dati e il tasto "Inserisci"
>che dovrebbe fare l'update del mio database.
>
>Bene. Per ora riesco a visualizzare i dati nel primo form e a
>muovermi tra i record.
>Quando invece passo a dover aggiungere un nuovo record invece
>vado in pappa.
>Come faccio a inserire i dati nelle due tabelle se non a mano
>con delle richieste sql "classiche"?
>
>Il mio dataset "discende" da Access in cui in una query unisco
>le due tabelle
>SELECT rubrica.nome, rubrica.cognome, rubrica.telefono, professioni.professione
>FROM professioni INNER JOIN rubrica ON professioni.[ID] = rubrica.[Idprofessione]
>ORDER BY rubrica.cognome;
>
>Grazie
>Emilie

Ciao Emilie,
per poter utilizzare Ado.net, ti suggerisco questo:

Apri la tua connessione in singleton in questo modo hai sempre una connessione al database (poi ci sono pro e contro su questo pattern. Per 2 tabelle puoi utilizzarlo tranquillamente). Ti allego un link per
vederlo : http://www.vbdotnetheaven.com/UploadFile/susanabraham/CreationalPatternsvb11122005001524AM/CreationalPatternsvb.aspx

A questo punto ti fai un tuo piccolo DAL per gestire tutte le operazioni al database INSERT, UPDATE, DELETE, SEARCH in questo modo (magari con un SQLHelper).

//CONNECTION conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=w:\newdata.mdb" con = New OleDbConnection(conString) con.Open() //ADD Dim strSql As String Try strSql = "insert into books values('" & tbBook.Text & "','" & tbAuthor.Text & "')" Dim cmd As OleDbCommand = New OleDbCommand(strSql, con) Dim icount As Integer = cmd.ExecuteNonQuery If icount > 0 Then MsgBox(tbBook.Text & " book added to your library") DB2List(lstBooks) Else MsgBox(tbBook.Text & " cannot be added to your library") End If Catch ex1 As Exception MsgBox(ex1.Message) End Try //MODIFY Dim strSql As String Try strSql = "update books set author = '" & tbAuthor.Text & "' where book = '" & tbBook.Text & "'" Dim cmd As OleDbCommand = New OleDbCommand(strSql, con) Dim icount As Integer = cmd.ExecuteNonQuery If icount > 0 Then MsgBox(tbBook.Text & " author updated") DB2List(lstBooks) Else MsgBox(tbBook.Text & " author cannot be updated") End If Catch ex1 As Exception MsgBox(ex1.Message) End Try //DELETE Dim selItem As String Dim strSql As String For i = 0 To lstBooks.Items.Count - 1 If lstBooks.GetSelected(i) Then selItem = lstBooks.GetItemText(lstBooks.Items(i)) End If Next strSql = "delete from books where book='" & selItem & "'" Dim cmd As OleDbCommand = New OleDbCommand(strSql, con) Dim icount As Integer = cmd.ExecuteNonQuery If icount > 0 Then MsgBox(selItem & " deleted sucessfully") DB2List(lstBooks) Else MsgBox(selItem & " cannot be deleted") End If //DELETE ALL Dim strSql As String strSql = "delete * from books" Dim cmd As OleDbCommand = New OleDbCommand(strSql, con) Dim icount As Integer = cmd.ExecuteNonQuery If icount > 0 Then MsgBox("All books deleted successfully") DB2List(lstBooks) Else MsgBox("All books cannot be deleted") End If //READ ALL Private Sub DB2List(ByRef lb As ListBox) Dim strSql As String = "select * from books" Dim dadapter As OleDbDataAdapter dadapter = New OleDbDataAdapter() dadapter.SelectCommand = New OleDbCommand(strSql, con) Dim dset As DataSet = New DataSet() dadapter.Fill(dset, "Books") lb.DataSource = dset lb.DisplayMember = "Books.Book" End Sub //READ SELECTED Private Sub RetrievConditional(ByVal bk As String) Dim strSql As String = "select * from books where book = '" & bk & "'" Dim cmd As OleDbCommand = New OleDbCommand(strSql, con) dr = cmd.ExecuteReader While dr.Read() tbBook.Text = dr(0) tbAuthor.Text = dr(1) End While End Sub

Ti ho allegato due esempi (moldo piu' puliti). Sono in c# ma li puoi tranquillamente convertire in vb.ne facilmente.

Adesso puoi chiamare queste operazioni nel tuo progetto. Quello che potresti provare a fare in un secondo momento provare a creare degli strati. oltre ad un dal anche uno strato di businness.

Ciao
Fammi Sapere
A.G.





emilier Profilo | Newbie

Grazie mille metto tutto in pratica e poi ti dico.
Stavo guardando qualche esempio preso dai libri della microsoft press, ma per ora non avevo cavato un ragno dal buco.


alx_81 Profilo | Guru

>Grazie mille metto tutto in pratica e poi ti dico.
>Stavo guardando qualche esempio preso dai libri della microsoft
>press, ma per ora non avevo cavato un ragno dal buco.
Ciao, scusate se intervengo, ma devo fare un appunto sulla composizione del SQL.
Ho scritto un articolo sulla SQL Injection, e vi chiedo di dargli una letta per evitare che si possa essere un po' esposti ad attacchi di malintenzionati.
Basta una security non delle migliori ed una concatenazione per essere bucati:
http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx

Detto questo, capisco perfettamente che algraps ti abbia proposto un helper molto utile per la tua problematica, ma devo assolutamente renderti partecipe del SQL Injection.
Ciao
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

pieroalampi Profilo | Expert


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA

emilier Profilo | Newbie

Sto facendo un mini gestionale per avere un'interfaccia al mio access anche su pc che non hanno l'office installato.
Per cui ho tutti i dati a disposizione e in chiaro perché lo uso io o comunque persone che hanno completo accesso alla mia attività.
Mi chiedo il motivo di fare un SQL injection quando basterebbe aprire l'mdb :)
Grazie comunque per l'informazione preziosa

alx_81 Profilo | Guru

>Mi chiedo il motivo di fare un SQL injection quando basterebbe aprire l'mdb :)
l'accesso del db access potrebbe essere in rete, e via filesystem potrebbe non essere possibile copiarsi il file ma solo (per permission) connettersi ad esso.
Ecco che un attacco sql injection, farebbe molto male ai tuoi dati.
Tuttavia, ad ogni cosa il suo contesto. Ho preferito specificare una pratica che è tipicamente da non seguire.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

emilier Profilo | Newbie

Ho capito.

Sapete se in rete ci sono esempi di gestionali in vb.net? Ne ho trovati in C++, in delphi, ma non in vb.net

alx_81 Profilo | Guru


>Sapete se in rete ci sono esempi di gestionali in vb.net? Ne
>ho trovati in C++, in delphi, ma non in vb.net
no, purtroppo non ne conosco l'esistenza, non so aiutarti
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5