Utilizzo DB access con istruzioni ADO

di il
14 risposte

Utilizzo DB access con istruzioni ADO

Buona sera a tutti, mi sono appena iscritto al forum.

Sapete dirmi come e se posso programmare con vb.net (net fr. 6.0 o 5)  OS a 64bit con visual studio 2022 utilizzando il codice ADO ms access a cui sono ormai affezionato da 20anni ?

Ho notato che utilizzando vb.net e ultime librerie il modo di accedere ai db access è complesso e non riesco ad abituarmi.

Ho visto una discussione in questo forum ma non ho capito come fare.

Mi potete dire quali step devo seguire?

Grazie 1000

14 Risposte

  • Re: Utilizzo DB access con istruzioni ADO

    Ciao purtroppo bisogna stare al passo con l'evoluzione dei framework e strumenti di sviluppo.

    Se sei tra le persone che accettano positivamente i consigli:

    1. se con “net. fr. 6.0 o 5.0” intendi proprio ."Net Framework", quello utilizzabile solo su Windows per intenderci, lascia stare. Passa direttamente a .Net 8.0. La versione Framework è sempre meno utilizzata e relegata sempre più ai vecchi applicativi da manutenere.
    2. Lascia perdere ADO, anche se puoi benissimo utilizzarlo.  A meno di casi specifici e particolari, si usano gli ORM. In ambito .Net, a meno di non voler utilizzare ORM di terze parti, hai a disposizione Entity Framework
  • Re: Utilizzo DB access con istruzioni ADO

    Perdona la mia ignoranza ma cosa sono gli orm e come si ottengono?

     .net 8 sul mio visual studio 2022 mi sembra di non vederlo

    cosa è entity framework ?

  • Re: Utilizzo DB access con istruzioni ADO

    25/11/2023 - Sparvy ha scritto:


     .net 8 sul mio visual studio 2022 mi sembra di non vederlo

    Devi fare l'aggiornamento.

    25/11/2023 - Sparvy ha scritto:


    cosa è entity framework ?

    serve a creare un livello di astrazione tale da permetterti di lavorare con il database trattandolo come se fosse un insieme di oggetti. 

    Ti consiglio la lettura di questa sezione dedicata:

    https://learn.microsoft.com/it-it/ef/

  • Re: Utilizzo DB access con istruzioni ADO

    25/11/2023 - Toki ha scritto:


    25/11/2023 - Sparvy ha scritto:


     .net 8 sul mio visual studio 2022 mi sembra di non vederlo

    Devi fare l'aggiornamento.

    25/11/2023 - Sparvy ha scritto:


    cosa è entity framework ?

    serve a creare un livello di astrazione tale da permetterti di lavorare con il database trattandolo come se fosse un insieme di oggetti. 

    Ti consiglio la lettura di questa sezione dedicata:

    https://learn.microsoft.com/it-it/ef/

    Ho subito visto che ef non legge db msaccess giusto?

  • Re: Utilizzo DB access con istruzioni ADO

    Ciao, dai un'occhiata qui:

    https://learn.microsoft.com/en-us/ef/core/providers/?tabs=dotnet-core-cli

    nel tuo caso userai il provider EntityFrameworkCore.Jet

  • Re: Utilizzo DB access con istruzioni ADO

    Dai vs link ho scoperto che EF non supporta i db access

    non mi permette di inserire foto altrimenti vi avrei postato l' immagine :-(

  • Re: Utilizzo DB access con istruzioni ADO

    Il provider EntityFrameworkCore.Jet serve proprio per il supporto a MS Access.

  • Re: Utilizzo DB access con istruzioni ADO

    25/11/2023 - Toki ha scritto:


    Il provider EntityFrameworkCore.Jet serve proprio per il supporto a MS Access.

    Scusa il ritardo…ho scaricato entityframework JET (126K) ma non so come installarlo e non trovo help on line 

    Invece cercando da gestione pacchetti nuget di visual studio riesco a vedere sono il netframework.jit

    Mi puoi dire come fare?

  • Re: Utilizzo DB access con istruzioni ADO

    Scusate se intervengo, ma l'aspetto che Sparvy introduce è la perdita di semplicità nell'interagire con i dati all'interno di una tabella di un database, quale formato esso sia. Problema anche mio, vecchio programmatore, con tonnellate di codice in VB6. La perdita di ADO e del suo recordset è vissuta come un dramma. Per quanto mi sforzi ad utilizzare uno dei molteplici metodi messi a disposizione da ADO.Net non riuscirò mai a comprendere come possa essere stato eliminato un oggetto come il recordset di ADO. Non sempre è desiderabile passare per un dataset. Ad esempio se io volessi appendere un record su una tabella direttamente nel database oggi posso farlo con un “commander” direttamente dalla connessione, metodo più veloce, scrivendo una query “Insert”. Come si fa in SQL ad esempio. Sembra ridicolo ma per chi è abituato a scrivere righe sotto una “Addnew”, con assegnazione diretta del valore al suo campo e poi a chiudere con una bella “Update”, scrivere una query “Insert” astrusa con decine di campi risulta molto fastidiosa.

    Il punto credo stia nel fatto che programmatori nati con vb.net e programmatori nati con MS-DOS come il sottoscritto hanno maturato esperienze diverse non trovando punti di contatto. Io sono prossimo alla pensione ma ciò nonostante mi sforzo di trovare aspetti positivi in VB.net e c'è ne sono a dismisura rispetto VB6 ma quest'ultimo offriva il pieno controllo ad un programmatore e gli perdonava un sacco di cose mentre VB.net mi sembra inflessibile sotto questo punto. Tuttavia concordo nel fatto che bisogna adeguarsi ma guai a dire che bisogna evolversi perchè si sono fatti anche tanti passi indietro a mio giudizio. A disposizione per approfondire quanto affermato.

    La mia domanda da “ignorante” è tuttavia la seguente: esisteste qualcosa che possa in un certo senso emulare un recordset ? Ad esempio un datarow potrebbe scrivere direttamente dentro la tabella fisica nel database ?

    Avrei circa altre 2000 domande da porre per far capire la distanza che c'è con VB6.

  • Re: Utilizzo DB access con istruzioni ADO

    Salve,

    >La mia domanda da “ignorante” è tuttavia la seguente: esisteste qualcosa che possa in un certo senso emulare un recordset ? Ad esempio un datarow potrebbe scrivere direttamente dentro la tabella fisica nel database ?

    si, c'e', ed e' Ado.NET... il diretto successore di ADO "secco"... anche questo e' il cosidetto "bare metal", il modo piu' veloce di interagire con le basi dati, ed espone modelli quali il Dataset, il DataTable (quest'ultimo utilizzabile anche come binding source), e modelli di lettura quali il DataReader, che e' il cursore firehose piu' veloce esistente di estrazione dati dallo stream TDS esposto ad esempio da SQL Server, etc... MA sono modelli ad oggetti "old style", malgrado, come detto, siano effettivamente il modello piu' veloce di interazione con le basi dati, quello che poi gli ORM quali Entity Framework vanno poi ad utilizzare dietro alle quinte nascondendo poi tutto l'utilizzo di SqlCommands etc...

    gli ORM, tendenzialmente, "nascondono" il codice SQL da scrivere per l'interazione con la base dati...
    avendo un oggetto POCO sul quale interagire tipo

    dim order as new Order()
    order.Id = x
    order.CutomerId = y
    ...
    orders.Add(order)
    dbOrders.SaveChanges()

    risulta piu' "bello" per tutti noi sfaticati, senza poi dover pensare a scrivere ad esempio anche il codice SQL e/o le stored procedure utilizzate da un SqlCommand di insert/update/delete...
    quello che fa un ORM e' la "medesima cosa", costruisce dinamicamente il codice SQL per l'interazone con il db, ad esempio  (te lo scrivo in c# che faccio prima :D, ma lo leggi comunque bene)

    using (AdventureWorks db = new AdventureWorks())
    {
       var persons = (from p in db.People
                     join e in db.EmailAddresses
                     on p.BusinessEntityID equals e.BusinessEntityID
                     where p.FirstName == "KEN"
                     select new { 
                                  ID = p.BusinessEntityID, 
                                  FirstName = p.FirstName, 
                                  MiddleName = p.MiddleName, 
                                  LastName = p.LastName, 
                                  EmailID = e.EmailAddress1 
                     }).ToList();
    
       foreach (var p in persons)
       {
           Console.WriteLine("{0} {1} {2} {3} {4}", p.ID, p.FirstName, p.MiddleName, p.LastName, p.EmailID);
       }
    }

    che "nulla" nasconde nella sintassi LINQ la sintassi che avresti composto in SQL per avere in questo caso una proiezione estratta tra People e EmailAddresses esposta come "lista" che sarebbe stata in ADO la tua DataTable con selezione di proiezione

    SELECT p.BusinessEntityID, p.FirstName, p.MiddleName, p.LastName, e.EmailAddress1 
        FROM People p
            JOIN EmailAddresses e ON p.BusinessEntityID = e.BusinessEntityID
        WHERE p.FirstName = "KEN"

    ma con la sintassi di cui sopra, non devi passare dal datasource ADO/Ado.NET al tuo object model di interazione applicativa, ma hai gia' una LIST di oggetti POCO che tu poi utilizzi a tuo comodo... 
    questa lista ha il vantaggio di essere piu' "marshallable" mentre gli oggetti Ado.NET non lo sono, e' molto piu' leggera (ma non ha direttamente il tracking delle modifiche), ....
    ma cosi' va il mondo...

    cio' non toglie, pero', che alla fine della fiera, quando avrai dei colli di bottiglia nell'interazione con il db, non userai piu' "direttamente" il modo ORM di salvataggio
    persons.SaveChanges()
    ma probabilmente andrai a ripescare Ado.NET per l'esecuzione di SqlCommands "velocissimi" :D
    non dico quindi che gli ORM non vadano bene, ma potrebbero richiedere anche una ritoccatina manuale
    Pensa che StackOverflow utilizza una propria customizzazione, Dapper, per sveltire cio' che Entity Framework faceva troppo lentamente, cioe' proprio l'accesso ai db… ed e' profondamente avvicinata al bare metal di Ado.Net.
    smetto qui perche' si entra in guerra di religione tra chi piace scrivere codice SQL e chi no :D

    in ogni caso, tutti dobbiamo "crescere" :D

    my $ 0.02 (come si diceva una volta :D)

    salutoni romagnoli
    -- 
    Andrea

  • Re: Utilizzo DB access con istruzioni ADO

    @Angelix… anche se non è in questo thread che si dovrebbe affrontare una discussione così ampia, partiamo da alcune considerazioni.

    La tecnologia su cui si basa ADO è COM/OLE abbandonata da MS decenni fa per una serie di problemi, il più noto detto “DLL hell”, in favore di .NET/CLR e di protocolli testuali tipo XML al posto di protocolli binari.

    Inutile qui, secondo me, fare confronti tra le due tecnologie in quanto la prima è ovviamente limitata e obsoleta. Quello su cui ci si deve concentrare è che effettivamente la complessità di linguaggi veramente OOP come quelli .NET (e ovviamente Java) spiazza i programmatori autodidatta richiedendo maggiori conoscenze. È inevitabile perchè le architetture sono sempre più complesse (come Windows lo era rispetto a MSDOS, o NT rispetto a W98).

    Quindi che dei programmatori professionisti vedano i vantaggi di C# (ma anche VBNET) rispetto a VB6 e ciò non avvenga con chi si impegna in modo più dilettantistico, si può comprendere facilmente.

  • Re: Utilizzo DB access con istruzioni ADO

    Grazie ragazzi per la tempestiva risposta. Da ciò che scrivete comprendo che c'è molto da studiare e che la distanza tra noi della vecchia scuola e le nuove tecnologie è veramente tanta. Non so, vista la mia età, se riuscirò a colmarla tutta ma vi prometto che mi impegnerò in tal senso.

    Purtroppo ho molti sistemi scritti decenni fa in VBA ancora funzionanti presso aziende farmaceutiche e alimentari, procedure convalidate che non è facile riaprire. Sono sistemi MRP, MES, LIMS, WMS estremamente customizzati e i costi di aggiornamento potrebbero sembrare non sostenibili visto che sono perfettamente funzionanti e funzionali. A questo poi bisogna aggiungere i costi per una nuova convalida. Insomma qui la strada sarà chiusa fintanto che VBA e ADO rimarranno operativi. MS ha da poco rilasciato un nuovo provider per le versioni SQL superiori alla 2019 il che fa supporre che faccio prima io ad andare in pensione che ADO.

    Tuttavia i ns. nuovi sviluppi sono in VB.net e non nascondo che mi sto appassionando. Risulta chiaro che non sarò mai al livello di Oregon ma sono sicuro che riuscirò a sviluppare ciò che mi serve in ambito di “controllo di processo” e “assicurazione qualità”. Dopo tutto almeno due tra le prime cinque aziende farmaceutiche che ogni giorno bombardano di pubblicità sulle reti Rai e Mediaset, adottano i miei sistemi.

    La solidarietà tra programmatori e colleghi sta comunque nell'aiutarsi reciprocamente e quindi aprirò qualche post in futuro nella speranza di trovare disponibilità. In ogni caso ADO per semplicità è insuperabile se ciò che devi fare è semplicemente leggere e scrivere. Grazie di nuovo

  • Re: Utilizzo DB access con istruzioni ADO

    In realtà Angelics siamo praticamente coetanei e anche io ho sviluppato con tanti sistemi, di cui molti non conoscono neanche il nome. Ho usato tanti linguaggi e di VB6 sono anche stato MVP a dimostrare il mio attaccamento a quelle tecnologie.

    Tuttavia ho deciso di interessarmi a .NET (poco VB e molto C#) sin dai primi tempi proprio per stare al passo con i cambiamenti inevitabili.

    Comprendo che i costi per alcune aziende sono alti e a volte difficilmente affrontabili ma ho visto aziende miopi in difficoltà quando sono state costrette a migrare applicazioni e sistemi magari basati su DOS solo perché ancora funzionanti…

  • Re: Utilizzo DB access con istruzioni ADO

    Grazie oregon

    è proprio come dici. Ho vissuto la transizione da MS-DOS a Windows. Era una necessità e quindi ha rappresentato un momento di lavoro. Adesso è un pò più difficile far capire alcuni concetti.

    Sono contento che siamo “quasi coetanei” così ti potrò sottoporre alcuni problemi che sto in questo momento affrontando, ma aprirò un post ad hoc. Tratteremo l'utilizzo della telecamera di un MS Surface al posto di un lettore laser per il riconoscimento dei barcode.

    Ciao a presto

Devi accedere o registrarti per scrivere nel forum
14 risposte