locked
[SQLite] Errore su operazione semplicissima (creazione db) RRS feed

  • Domanda

  • Cari utenti,

    sarò molto dettagliato. Da giorni sto cercando di integrare un database SQLite nella mia app Win Phone 8.1 WRT, a tale scopo ho aggiunto i corretti riferimenti alle librerie SQLite (i due files SQLite.cs e SQLiteAsync.cs sono correttamente comparsi nel mio progetto), quindi seguendo alcuni tutorial ho creato la classe che vi posto sotto.

    using SQLite;
    using System;
    using System.Threading.Tasks;
    using Windows.Storage;
    
    namespace Functional_Timer
    {
        class DatabaseHelper
        {
    
            private String DB_NAME = "DATABASENAME.db";
    
            public SQLiteAsyncConnection Conn { get; set; }
    
            public DatabaseHelper()
            {
                Conn = new SQLiteAsyncConnection(DB_NAME);
                this.InitDb();
    
            }
    
            public async void InitDb()
            {
                // Create Db if not exist
                bool dbExist = await CheckDbAsync();
                if (!dbExist)
                {
                    await CreateDatabaseAsync();
                }
            }
    
            public async Task<bool> CheckDbAsync()
            {
                bool dbExist = true;
    
                try
                {
                    //ERRORE!!!
                    StorageFile sf = await ApplicationData.Current.LocalFolder.GetFileAsync(DB_NAME);
                }
                catch (Exception)
                {
                    dbExist = false;
                }
    
                return dbExist;
            }
    
            private async Task CreateDatabaseAsync()
            {
                //add tables here
                //example: await Conn.CreateTableAsync<DbComment>();
            }
    
        }
    }


    Ora, nel punto di tale classe contrassegnato con il mio commento ERRORE!!!, viene generato il seguente errore:

    Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.ni.dll
    Ulteriori informazioni: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)

    Considerato che ho istanziato tale classe nella pagina principale della mia applicazione con le seguenti due righe

     this.InitializeComponent();
                commentDataSource = new CommentDataSource(db);


    vi chiedo da cosa tale errore possa dipendere e come risolverlo. E' una situazione a cui tengo molto, perché la seguo da diversi giorni senza riuscire a venirne a capo. A chi dovesse tentare il miracolo di aiutarmi nella soluzione (sono sicuro che l'inghippo è sotto i miei occhi, perché l'operazione in sé sarebbe semplice; non sto ancora gestendo e manipolando dati, ma solo creando la loro base) posso fornire ogni più dettagliata spiegazione o informazione aggiuntiva. Aggiungo infine di aver trovato tra i warning l'avviso seguente, tuttavia non ho trovato alcuna libreria di quelle indicate andando in gestione riferimenti e cercando quel nome specifico.








    l'SDK "SQLite.WP81, Version=3.8.10.2" dipende dai seguenti SDK "Microsoft.VCLibs, version=12.0" che non sono stati aggiunti al progetto o non sono stati trovati. Assicurarsi di aggiungere queste dipendenze al progetto o è possibile che si verifichino problemi di runtime. È possibile aggiungere dipendenze al progetto mediante Gestione riferimenti.



    Grazie in anticipo a tutti per la vostra disponibilità.

    EDIT A proposito del pacchetto VCLibs mancante, vi faccio notare che digitando dalla package manager console il comando Install-Package Microsoft.VCLibs.120.SDKReference -PRE vedo il seguente messaggio di errore: 

    Install-Package : Unable to find package 'Microsoft.VCLibs.120.SDKReference'

    At line:1 char:1

    + Install-Package Microsoft.VCLibs.120.SDKReference -Pre

    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception

        + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

    domenica 24 maggio 2015 18:29

Risposte

  • Ciao Archimede Pitagorico,

    https://www.dropbox.com/s/wm8ja3akmkg92fn/Test.zip?dl=0

    In questa cartella zippata troverai un progetto semplicissimo tratto dal tuo tutorial con la sola creazione del db (non mi sembrava il caso di abusare del tuo tempo con il progetto completo, oltre la disponibilità che hai già avuto), e due schermate. La prima, è riferita all'errore relativa alla mancanza della famosa libreria che già si manifestava identicamente con il mio progetto. La seconda, a cosa accade quando eseguo il programma. Se tento di continuare comunque, il programma termina la sua esecuzione.

    Sono disorientato, perché ho fatto tutto quello che è indicato nella tua guida... Ma sicuramente lo avrò fatto nel modo sbagliato. Ti ringrazio ancora per il tuo aiuto e resto a tua disposizione per qualsiasi ulteriore dettaglio che dovesse servirti. Sono nelle tue mani.

    PS: utilizzo Visual Studio 2015.


    scaricando il tuo progetto, ho semplicemente l'errore sul fatto che non trova le versione dell'engine che hai scaricato, domanda: se provi con il device hai compilato in modalita arm ?

    Ciao.


    giovedì 28 maggio 2015 08:51
    Postatore

Tutte le risposte

  • Ciao Archimede Pitagorico,

    Cari utenti,

    sarò molto dettagliato. Da giorni sto cercando di integrare un database SQLite nella mia app Win Phone 8.1 WRT, a tale scopo ho aggiunto i corretti riferimenti alle librerie SQLite (i due files SQLite.cs e SQLiteAsync.cs sono correttamente comparsi nel mio progetto), quindi seguendo alcuni tutorial ho creato la classe che vi posto sotto.

    using SQLite;
    using System;
    using System.Threading.Tasks;
    using Windows.Storage;
    
    namespace Functional_Timer
    {
        class DatabaseHelper
        {
    
            private String DB_NAME = "DATABASENAME.db";
    
            public SQLiteAsyncConnection Conn { get; set; }
    
            public DatabaseHelper()
            {
                Conn = new SQLiteAsyncConnection(DB_NAME);
                this.InitDb();
    
            }
    
            public async void InitDb()
            {
                // Create Db if not exist
                bool dbExist = await CheckDbAsync();
                if (!dbExist)
                {
                    await CreateDatabaseAsync();
                }
            }
    
            public async Task<bool> CheckDbAsync()
            {
                bool dbExist = true;
    
                try
                {
                    //ERRORE!!!
                    StorageFile sf = await ApplicationData.Current.LocalFolder.GetFileAsync(DB_NAME);
                }
                catch (Exception)
                {
                    dbExist = false;
                }
    
                return dbExist;
            }
    
            private async Task CreateDatabaseAsync()
            {
                //add tables here
                //example: await Conn.CreateTableAsync<DbComment>();
            }
    
        }
    }

    Ora, nel punto di tale classe contrassegnato con il mio commento ERRORE!!!, viene generato il seguente errore:

    Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.ni.dll
    Ulteriori informazioni: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)

    Considerato che ho istanziato tale classe nella pagina principale della mia applicazione con le seguenti due righe

     this.InitializeComponent();
                commentDataSource = new CommentDataSource(db);

    vi chiedo da cosa tale errore possa dipendere e come risolverlo. E' una situazione a cui tengo molto, perché la seguo da diversi giorni senza riuscire a venirne a capo. A chi dovesse tentare il miracolo di aiutarmi nella soluzione (sono sicuro che l'inghippo è sotto i miei occhi, perché l'operazione in sé sarebbe semplice; non sto ancora gestendo e manipolando dati, ma solo creando la loro base) posso fornire ogni più dettagliata spiegazione o informazione aggiuntiva. Aggiungo infine di aver trovato tra i warning l'avviso seguente, tuttavia non ho trovato alcuna libreria di quelle indicate andando in gestione riferimenti e cercando quel nome specifico.

    l'SDK "SQLite.WP81, Version=3.8.10.2" dipende dai seguenti SDK "Microsoft.VCLibs, version=12.0" che non sono stati aggiunti al progetto o non sono stati trovati. Assicurarsi di aggiungere queste dipendenze al progetto o è possibile che si verifichino problemi di runtime. È possibile aggiungere dipendenze al progetto mediante Gestione riferimenti.

    Grazie in anticipo a tutti per la vostra disponibilità.

    EDIT A proposito del pacchetto VCLibs mancante, vi faccio notare che digitando dalla package manager console il comando Install-Package Microsoft.VCLibs.120.SDKReference -PRE vedo il seguente messaggio di errore: 

    Install-Package : Unable to find package 'Microsoft.VCLibs.120.SDKReference'

    At line:1 char:1

    + Install-Package Microsoft.VCLibs.120.SDKReference -Pre

    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception

        + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

    mi vien da pensare che il DataBase non viene creato, perché vedo questa parte di codice

      private async Task CreateDatabaseAsync()
            {
                //add tables here
                //example: await Conn.CreateTableAsync<DbComment>();
            }
     

    dove le due istruzioni sono commentate, per cui ricevi l'eccezione di file not found, se può esserti di aiuto ho creato tempo fa questo articolo

    Ciao.


    domenica 24 maggio 2015 20:32
    Postatore
  • Grazie infinite intanto per la tua risposta, anche decommentando e mettendo una istruzione per la creazione di un database (togliendo //example: ed aggiungendo tra i simboli < e > il nome di una reale classe che crea i campi di una tabella) vedo l'identico errore. L'articolo che hai proposto ripercorre in pratica le stesse operazioni che ho compiuto io. Non ne vengo davvero fuori, se potessi aiutarmi a risolvere te ne sarei gratissimo. Ma non è che secondo te potrebbe dipendere da quel pacchetto mancante, che per chissà quale motivo non riesco a trovare tra i riferimenti disponibili? Grazie ancora.

    EDIT: Potremmo essere vicini alla soluzione. Anche scaricando il tuo codice (dalla guida che mi hai postato) vedo alcuni errori, anch'essi riferiti alla mancanza di qualche libreria o riferimento. Trattandosi di codice che sarà scritto sicuramente meglio del mio, e che tu conoscerai benissimo, proviamo se sei d'accordo a capire come mai quel codice non vada sulla mia macchina.

    Dunque, sarò molto dettagliato.

    1) Sono andato nella pagina della tua guida

    2) Ho scaricato il progetto

    3) Ho fatto click sul file del progetto importandolo in Visual Studio 2015 RC

    4) Ho subito notato la presenza del triangolo giallo di warning vicino alle dipendenze Microsoft Visual C++ 2013

    5) Avviandolo in un emulatore, vedo i seguenti errori

    Impossibile trovare il componente Visual C++ 2013 a cui si è fatto riferimento; l'SDK per VCLibs non è stato trovato. Ti allego una schermata degli errori (non considerare il problema SQLite che vedi nella immagine, già risolto con la corretta importazione del componente). Da cosa potrebbe dipendere? Eppure quella componente nel progetto la vedo, seppure col simbolo di warning. Ho provato in tanti modi a importare quella libreria, ma senza mai riuscirci. Vuoi vedere che il problema è proprio quello?

    Grazie ancora.

     


    EDIT (2): ho scaricato e installato quel componente da qui https://www.microsoft.com/it-it/download/details.aspx?id=40784 eseguendo il file così scaricato e vedendo un messaggio di conferma installazione, eppure l'errore relativo a Visual C++ rimane. Forse l'errore è proprio quel componente... Le ho provate tutte, ma ancora il tuo progetto non lo vede. Grazie ancora, mi sa che siamo vicini alla soluzione. La domanda per risolvere il quesito, quindi, adesso è: come installare correttamente quel componente Visual C++ in modo da eliminare quell'errore? Ho anche seguito alla lettera le istruzioni indicate qui: https://www.nuget.org/packages/Microsoft.VCLibs.120.SDKReference/1.0.0-alpha01 ma senza alcun esito. Mi sembra un incubo...



    domenica 24 maggio 2015 21:33
  • Ciao Archimede Pitagorico,

    Grazie infinite intanto per la tua risposta, anche decommentando e mettendo una istruzione per la creazione di un database (togliendo //example: ed aggiungendo tra i simboli < e > il nome di una reale classe che crea i campi di una tabella) vedo l'identico errore. L'articolo che hai proposto ripercorre in pratica le stesse operazioni che ho compiuto io. Non ne vengo davvero fuori, se potessi aiutarmi a risolvere te ne sarei gratissimo. Ma non è che secondo te potrebbe dipendere da quel pacchetto mancante, che per chissà quale motivo non riesco a trovare tra i riferimenti disponibili? Grazie ancora.

    EDIT: Potremmo essere vicini alla soluzione. Anche scaricando il tuo codice (dalla guida che mi hai postato) vedo alcuni errori, anch'essi riferiti alla mancanza di qualche libreria o riferimento. Trattandosi di codice che sarà scritto sicuramente meglio del mio, e che tu conoscerai benissimo, proviamo se sei d'accordo a capire come mai quel codice non vada sulla mia macchina.

    Dunque, sarò molto dettagliato.

    1) Sono andato nella pagina della tua guida

    2) Ho scaricato il progetto

    3) Ho fatto click sul file del progetto importandolo in Visual Studio 2015 RC

    4) Ho subito notato la presenza del triangolo giallo di warning vicino alle dipendenze Microsoft Visual C++ 2013

    5) Avviandolo in un emulatore, vedo i seguenti errori

    Impossibile trovare il componente Visual C++ 2013 a cui si è fatto riferimento; l'SDK per VCLibs non è stato trovato. Ti allego una schermata degli errori (non considerare il problema SQLite che vedi nella immagine, già risolto con la corretta importazione del componente). Da cosa potrebbe dipendere? Eppure quella componente nel progetto la vedo, seppure col simbolo di warning. Ho provato in tanti modi a importare quella libreria, ma senza mai riuscirci. Vuoi vedere che il problema è proprio quello?

    Grazie ancora.

     


    EDIT (2): ho scaricato e installato quel componente da qui https://www.microsoft.com/it-it/download/details.aspx?id=40784 eseguendo il file così scaricato e vedendo un messaggio di conferma installazione, eppure l'errore relativo a Visual C++ rimane. Forse l'errore è proprio quel componente... Le ho provate tutte, ma ancora il tuo progetto non lo vede. Grazie ancora, mi sa che siamo vicini alla soluzione. La domanda per risolvere il quesito, quindi, adesso è: come installare correttamente quel componente Visual C++ in modo da eliminare quell'errore? Ho anche seguito alla lettera le istruzioni indicate qui: https://www.nuget.org/packages/Microsoft.VCLibs.120.SDKReference/1.0.0-alpha01 ma senza alcun esito. Mi sembra un incubo...



    hai scaricato l'engine corretto ? perché vedo che manca l'sdk 3.8.7.4, inoltre dovresti scaricare la libreria Sqllite net per interagire. Poi su Visual Studio 2015 non ho ancora provato. Eventualmente se vuoi carica il progetto su onedrive e vediamo di capire dove stà il problema.

    Ciao.


    lunedì 25 maggio 2015 17:24
    Postatore
  • Ciao Archimede Pitagorico,

    Grazie infinite intanto per la tua risposta, anche decommentando e mettendo una istruzione per la creazione di un database (togliendo //example: ed aggiungendo tra i simboli < e > il nome di una reale classe che crea i campi di una tabella) vedo l'identico errore. L'articolo che hai proposto ripercorre in pratica le stesse operazioni che ho compiuto io. Non ne vengo davvero fuori, se potessi aiutarmi a risolvere te ne sarei gratissimo. Ma non è che secondo te potrebbe dipendere da quel pacchetto mancante, che per chissà quale motivo non riesco a trovare tra i riferimenti disponibili? Grazie ancora.

    EDIT: Potremmo essere vicini alla soluzione. Anche scaricando il tuo codice (dalla guida che mi hai postato) vedo alcuni errori, anch'essi riferiti alla mancanza di qualche libreria o riferimento. Trattandosi di codice che sarà scritto sicuramente meglio del mio, e che tu conoscerai benissimo, proviamo se sei d'accordo a capire come mai quel codice non vada sulla mia macchina.

    Dunque, sarò molto dettagliato.

    1) Sono andato nella pagina della tua guida

    2) Ho scaricato il progetto

    3) Ho fatto click sul file del progetto importandolo in Visual Studio 2015 RC

    4) Ho subito notato la presenza del triangolo giallo di warning vicino alle dipendenze Microsoft Visual C++ 2013

    5) Avviandolo in un emulatore, vedo i seguenti errori

    Impossibile trovare il componente Visual C++ 2013 a cui si è fatto riferimento; l'SDK per VCLibs non è stato trovato. Ti allego una schermata degli errori (non considerare il problema SQLite che vedi nella immagine, già risolto con la corretta importazione del componente). Da cosa potrebbe dipendere? Eppure quella componente nel progetto la vedo, seppure col simbolo di warning. Ho provato in tanti modi a importare quella libreria, ma senza mai riuscirci. Vuoi vedere che il problema è proprio quello?

    Grazie ancora.

     


    EDIT (2): ho scaricato e installato quel componente da qui https://www.microsoft.com/it-it/download/details.aspx?id=40784 eseguendo il file così scaricato e vedendo un messaggio di conferma installazione, eppure l'errore relativo a Visual C++ rimane. Forse l'errore è proprio quel componente... Le ho provate tutte, ma ancora il tuo progetto non lo vede. Grazie ancora, mi sa che siamo vicini alla soluzione. La domanda per risolvere il quesito, quindi, adesso è: come installare correttamente quel componente Visual C++ in modo da eliminare quell'errore? Ho anche seguito alla lettera le istruzioni indicate qui: https://www.nuget.org/packages/Microsoft.VCLibs.120.SDKReference/1.0.0-alpha01 ma senza alcun esito. Mi sembra un incubo...



    hai scaricato l'engine corretto ? perché vedo che manca l'sdk 3.8.7.4, inoltre dovresti scaricare la libreria Sqllite net per interagire. Poi su Visual Studio 2015 non ho ancora provato. Eventualmente se vuoi carica il progetto su onedrive e vediamo di capire dove stà il problema.

    Ciao.


    Grazie tantissimo! Domani ti preparo tutto e lo carico, forse entro sera perché sarò via tutto il giorno. Grazie ancora e a domani.

    lunedì 25 maggio 2015 19:50
  • https://www.dropbox.com/s/wm8ja3akmkg92fn/Test.zip?dl=0

    In questa cartella zippata troverai un progetto semplicissimo tratto dal tuo tutorial con la sola creazione del db (non mi sembrava il caso di abusare del tuo tempo con il progetto completo, oltre la disponibilità che hai già avuto), e due schermate. La prima, è riferita all'errore relativa alla mancanza della famosa libreria che già si manifestava identicamente con il mio progetto. La seconda, a cosa accade quando eseguo il programma. Se tento di continuare comunque, il programma termina la sua esecuzione.

    Sono disorientato, perché ho fatto tutto quello che è indicato nella tua guida... Ma sicuramente lo avrò fatto nel modo sbagliato. Ti ringrazio ancora per il tuo aiuto e resto a tua disposizione per qualsiasi ulteriore dettaglio che dovesse servirti. Sono nelle tue mani.

    PS: utilizzo Visual Studio 2015.


    mercoledì 27 maggio 2015 09:51
  • Ciao Archimede Pitagorico,

    https://www.dropbox.com/s/wm8ja3akmkg92fn/Test.zip?dl=0

    In questa cartella zippata troverai un progetto semplicissimo tratto dal tuo tutorial con la sola creazione del db (non mi sembrava il caso di abusare del tuo tempo con il progetto completo, oltre la disponibilità che hai già avuto), e due schermate. La prima, è riferita all'errore relativa alla mancanza della famosa libreria che già si manifestava identicamente con il mio progetto. La seconda, a cosa accade quando eseguo il programma. Se tento di continuare comunque, il programma termina la sua esecuzione.

    Sono disorientato, perché ho fatto tutto quello che è indicato nella tua guida... Ma sicuramente lo avrò fatto nel modo sbagliato. Ti ringrazio ancora per il tuo aiuto e resto a tua disposizione per qualsiasi ulteriore dettaglio che dovesse servirti. Sono nelle tue mani.

    PS: utilizzo Visual Studio 2015.


    scaricando il tuo progetto, ho semplicemente l'errore sul fatto che non trova le versione dell'engine che hai scaricato, domanda: se provi con il device hai compilato in modalita arm ?

    Ciao.


    giovedì 28 maggio 2015 08:51
    Postatore
  • Ah! Sul serio? Allora come pensavo sbaglio qualcosa io. Adesso faccio in modo di mettermi esattamente nelle tue stesse condizioni, restringendo il campo troveremo sicuramente la causa. Hai detto che su VS 2015 non hai ancora provato, giusto? Allora provo a scaricare VS 2013 ed eseguire tutto lì.

    EDIT: Appena ho finito ti dico, dammi poche ore.

    EDIT: LA SOLUZIONE E' VICINA! Già seguendo l'installazione vedo che sta scaricando esattamente quelle librerie che nella versione precedente non riusciva a trovare.
    venerdì 29 maggio 2015 08:43
  • DIPENDEVA DALLA VERSIONE DI VS

    Con VS 2015 non trovava nulla, con VS 2013 è andato tutto liscio come l'olio. Lezione del giorno: mai usare RC per i propri progetti. Grazie di tutto.

    mercoledì 3 giugno 2015 08:36