Errore mancato aggiornamento database sola lettura

di Sante il
8 risposte
Saluti a tutto lo staff.
Sono a chiedervi una mano in merito al seguente problema.
Ho un progetto database mdf su Microsoft sql server tramite visual studio 2019 - visual basic.
Premesso che il progetto funziona alla perfezione all'interno dell'editor di visual basic, ma dopo
aver creato l'eseguibile del progetto, sposto, mediante copia in un altra cartella, il file di
database mdf, nonchè il file log.ldf.
Il database si avvia regolarmente, ma nel momento in cui voglio aggiungere record o modificarli, mi da errore in merito al file di database che si trova in sola lettura. Ho fatto tutti i controlli e le prove possibili, cercando di togliere l'attributo di sola lettura sia alla cartella del progetto che a quella esterna, senza riuscirvi perchè l'attributo ricompare. In ogni caso all'interno dell'editor di VB funziona tutto alla perfezione. Il problema è all'esterno dell'editor. Altri eseguibili che non contengono database funzionano.
Spero di essermi spiegato bene, ma ovviamente sono quì anche a rispondere.

Grazie, saluti

8 Risposte

  • Intanto perché hai scritto in questa sezione che è per il VB6 se utilizzi VB.NET?

    E in secondo luogo, di quale versione di SQL Server parliamo? Hai spostato i file semplicemente spostandoli da una cartella all'altra?
  • Intanto grazie della risposta e mi scuso per non aver individuato subito la sezione VB.Net.
    La versione di sql server è express 2019 localdb.
    Si, ho copiato semplicemente i file in una cartella esterna al progetto.
    Mancherà qualcosa di sicuro ma non ho capito che cosa.
  • Ma la stringa di connessione l'hai cambiata? Dove punta la tua applicazione?
  • No, non ho cambiato nulla del genere:
    questa è la connessione:

    Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\File.mdf;Integrated Security=True;Connect Timeout=30
    A livello di progetto funziona tutto comunque.
    Il problema sorge quanto si crea l'eseguibile.
  • Devi cambiare il valore della DataDirectory prima di collegarti al DB.

    Se il db sta nella cartella dell'eseguibile, allora (in C# ma cambia poco)
    
     string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
     string path = (System.IO.Path.GetDirectoryName(executable));
     AppDomain.CurrentDomain.SetData("DataDirectory",path);
     
    oppure opera di conseguenza usando sempre la AppDomain.CurrentDomain.SetData
  • Ho spostato la discussione nell'area corretta
  • Devo modificare la stringa di connessione in MySetting quindi.
    Devo copiare tutte e tre le righe? O solo quella relativa all'AppDomain?
  • Dopo varie peripezie sono riuscito a risolvere semplicemente spostando i file mdf e log nella cartella
    del progetto - soluzione, cioè dove è presente il file con estensione sln.
    Poi ho compilato in modalità Release ed ho copiato e incollato all'esterno solo l'eseguibile ricavato.
    Non so se sono stato chiaro.
    Grazie comunque a tutti.
Devi accedere o registrarti per scrivere nel forum
8 risposte