Passaggio a SQLServer Express 2022

di il
19 risposte

Passaggio a SQLServer Express 2022

Buongiorno,

premetto che non sono molto competente e quindi chiedo la vostra pazienza sin dall'inizio..

Vorrei chiedere supporto per risolvere un problema che si è presentato su un'applicazione VBnet che ho scritto da molto tempo fa e che faceva uso di un dababase (locale) sql utilizzando la versione 2008.  E' sempre andato bene fino ad un paio di settimane fa, quando (credo) in seguito ad aggiornamenti automatici di Microsoft ha smesso di funzionare a causa delkl'impossibilità di accedere al Database. Ho provato a cambiare tutto il possibile, installare SQL Express 2022 e rimuovere il precedente, ma niente da fare. Ho sempre errori che dicono che i dati sono riferiti ad un instanza SQLServer che non viene trovata.

Provo a generare nuove connessioni dati al progetto da Visual Studio, ma fallisce sempre il test connessione ed ottengo errore che vedete nell'immagine allegata. Per mia incompetenza non so come fare a risolvere, scollegando vecchia versione e collegando SQLServer Express 2022.. Ogni suggerimento è molto gradito!

Ringrazio anticipatamente.

19 Risposte

  • Re: Passaggio a SQLServer Express 2022

    Questo e' dovuto a quella “scemenza” di sistema “automatico” di identificazione delle istanze di SQL server in esecuzione, e relativa “discovery/connessione automatica”

    Quando SQL server viene installato la prima volta, crea anche un'"istanza" del servizio con nome “sqlserver”, se mi ricordo bene.

    E se lo fai una volta soltanto, tutto funziona alla grande (se hai fortuna ;-)).

    Il problema e' che se lo disinstalli e lo re-installi, poiche' la disinstallazione non fa una pulizia “completa”, il nome “sqlserver” risulta “occupato” e viene creato un nuovo nome (plausibilmente “sqlserver1”). Risultato: “sqlserver” non esiste, ma esiste “sqlserver1”, MA la tua applicazione fa ancora riferimento a “sqlserver” e quindi non riesc piu' a collegarsi.

    Non c'e' una “soluzione semplice”: e' un pasticcio perche' “SQL Server” e' un DBMS per GROSSI sistemi, dove la versione “express” e' solo una versione “castrata” del DBMS completo, ma continua a portarsi dietro tutte le funzionalita' della versione “cicciotta”.

    .

    La soluzione che adotto io e' abilitare la connessione via TCP/IP sulla porta 1433, ed uso SOLO questo sistema: o il DBMS ASCOLTA su questa porta, oppure non c'e', e allora vado a vedere perche'. Ed il client si deve connetter sempre e solo all'indirizzo <SERVER>:1433.

    .

    Ovviamente si puo' anche semplicemente mettere a posto la configurazione corrente: devi solo scoprire come si chiama la nuova instaza e correggere la stringa di connessione.

  • Re: Passaggio a SQLServer Express 2022

    Grazie per la tua rapida risposta, Migliorabile..

    Come dicevo, non sono proprio ferratissimo e le due soluzioni che proponi faccio fatica a comprenderle.. In particolare: il DB è un file locale, perchè dovrei indirizzarlo ad una connessione di retesu porta TCP/IP?

    Riguardo la stringa di connessione, che dovrebbe essere la soluzione semplice e rapida, è quella che Visual Studio dovrebbe creare da sola quando cerco di “aggiungere una nuova connessione dati” al progetto… Ma fallisce sempre il Test Connessione e non so dove/ come cambiare l'eventuale collegamento da SQLServer Express 2019 (che dovrebbe essere versione 15, e che non è più presente nel mio PC ma se anche lo reinstallo non cambia nulla) a quello 2022 (che dovrebbe essere 16).

    C'e' qualche file di testo su PC dove cambiare la stringa connessione con un editor? C'e' qualcosa da cambiare nel registro di Sistema?

    Possibile che per cambiare solo il parametro della versione Server, le applicazioni non girino più? Tra l'altro io non avevo fatto nulla per cambiare, prima di ricevere l'errore. E' stato in seguito a qualche auto-aggiornamento MS, tutto funzionava bene 15 gg fa!

    Rinnovo a te e chiunque possa darmi una mano il cortese invito.. Grazie!

    PS:

    Se uso l'esplora oggetti di SQL Server da Visual Studio, i database sono collegati e posso anche vedere i contenuti delle relative Tabelle.. Però non riesco a collegarli nuovamente al progetto.. Può essere necessario correggere qualche riferimento nel progetto VB piuttosto che lavorare sul lato SQL Server? Ho anche installato Server Management Studio, magari da lì è possibile fare qualcosa?

  • Re: Passaggio a SQLServer Express 2022

    Il DB NON E' un file locale, sono TANTI file nel disco del server PIU' un'applicazione decisamente COMPLESSA che si assicura la CONSISTENZA DEI Dati quando questi vengono aggiornati da N utenti contemporaneamente. Non c'entra il fatto che tu sia l'unico ad usarlo, lui è progettato per servire CENTINAIA/MIGLIAIA DI UTENTI in contemporanea. 

    Per il resto, è meglio che tu approfondisco che cosa e un DBMS, perché non comprenderlo ha conseguenze dirette su come implenti la tua applicazione

  • Re: Passaggio a SQLServer Express 2022

    Capisco il problema della grande struttura del DBMS a cui accenni.. E' proprio perchè è complicato che chiedevo aiuto a chi già lo conosce…  Siccome lo uso da anni proprio come fosse un “semplice” DB locale, mettersi a studiare tutto ciò che c'è dietro SQL Server non penso piacerebbe a nessuno, a meno che non lo faccia o lo debba fare per professione.

    Riguardo invece la “semplice” soluzione di cambiare la stringa di connessione per indirizzare la mia applicazione alla versione 2022, hai (o avete se qualcun altro mi sta leggendo) qualche suggerimento?

    La frustrazione nasce dal fatto che dovrebbe essere cosa da poco cambiare una stringa di testo per ottenere il cambio desiderato, ma non trovo su MS niente che faccia capire come farlo!

  • Re: Passaggio a SQLServer Express 2022

    Come ti ha detto @Migliorabile il primo passo da fare è capire come si chiama l'istanza di SQLserver che il programma di installazione ha generato.
    Devi quindi lanciare il programma di configurazione di SQLserver e trovare il nome dell'istanza

    Comunque SQLserver non è certo progettato per lavorare in locale, se devi fare questo potresti dare un'occhiata ad alternative più facili quindi da usare, da installare e da configurare come ad esempio SQLite
    https://www.sqlite.org/

    Strana anche la faccenda che si sia auto-aggiornato, questa non l'avevo mai sentita, io ho parecchie installazioni di SQLserver 2008 e tutt'ora funzionano benissimo.

  • Re: Passaggio a SQLServer Express 2022

    Grazie per il tuo input, SirJo..

    Il problema non è trovare il nome dell'istanza sever, è come passare da una vecchia istanza alla nuova nella mia applicazione Visualbasic..

    Riguardo l'aggiornamento  che ha scombussolato tutto, assicuro che tutto funzionava senza problemi un paio di settimane fa. Poi ci sono stati aggiornamenti (che ho comunque lanciato io, non completamente automatici) sia di Windows (aggiornamento pesante, quello semestrale per intenderci) ed uno di VisualStudio. Dopo di questi, ho cominciato a vedere l'errore riportato nell'immagine di cui sopra.

    Io sospetto che sia più un problema di agganciare i dati nuovamente all'applicazione dall'interno di VisualStudio, piuttosto che un problema di SQLServer. L'ultima versione funzionante che era installata sul pc era la 2019, con dipendenza dalla 2012 (nome istanza: MSSQL15.SQLEXPRESS, ma sicuramente faceva riferimento al vecchio SQLServer2008, lo vedo con SQLServer Management Studio guardando alle compatibilità dei miei file locali .MDF) . Comunque la versione che ora è l'unica installata, 2022/ istanza MSSQL16.SQLEXPRESS vede i dati, i file sono integri etc.

    Quindi riassumento: 

    -se lancio l'applicazione, ottengo errore perchè fa riferimento a vecchia istanza non più presente ( e se reinstallo 2019 non cambia nulla, perchè prende un nuvo nomne istanza ad ogni nuova installazione)

    -se da VisualStudio cerco di aggiungere nuova origine dati puntandop ai file .MDF, fallisce sempre il Test Connessione che è quello che dovrebbe crearmi una nuova Stringa Connessione aggiornata al nuovo Server

    E non so come “cancellare” ogni riferimento alla vecchia istanza e far puntare alla nuova. Cercare di capire usando l'help di Microsoft è un incubo, milioni di riferimenti incrociati che fanno perdere un sacco di tempo e capire molto poco.. Dovrò cercare letteratura adeguata (e sperabilmente semplificata) e ripartire da zero, a quanto sembra.. Possibile non ci sia un Tool di utilizzo ad alto livello per upgradare con facilità la versione SQLServer?

    Grazie per Ssuggerimento SQLite, vado a vederlo ma non vorrei installare altra roba che poi intreccia ancora di più le connessioni dati tra le varie versioni di Server.

    Saluti!

    PS: questo è l'avviso di errore che ottengo lanciando la “vecchia” versione già precompilata.. Anche cercando su web questo errore 52 non sono riuscito a cavare un ragno dal buco

  • Re: Passaggio a SQLServer Express 2022


    Quando installi Visual Studio e dallo stesso file di installazione selezioni anche SQLserver, quando aggiorni Visual Studio si aggiorna anche SQLserver.
    Ecco perchè io preferisco installare Visual Studio e SQLserver con due programmi di installazione separati.

    Io non utilizzo la connessione guidata del Visual Studio, utilizzo tutto “a mano”, cioè è tutto nel mio codice VB.NET, stringa di connessione, parametri vari, numero della porta eccetera, ed utilizzo sempre una connessione TCP/IP, anche se il database è in locale, per cui non posso esserti utile più di tanto quando parli di generare una nuova origine dati, ma quello che mi ha lasciato un po' perplesso è quando affermi che “cerco di aggiungere nuova origine dati puntandop ai file .MDF”
    Secondo me non devi puntare al file .MDF, ma altro sistema.
    Se non usi TCP/IP di solito per default si utilizza la “Shared memory” o altrimenti le “Named Pipes”
    Spiegami passo-passo come fai a creare l'orogine dati, vediamo di darti una mano

  • Re: Passaggio a SQLServer Express 2022

    Grazie SirJo, provo a spiegare quello che succede, dal mio punto di vista (che ripeto, non è da esperto)..

    per come ho capito io, SQLServer è solo il “tramite” tra le basi dati e la propria applicazione. Un motore che prende i comandi SQL lanciati dalla propria applicazione ed effettua inserimenti/modifiche/cancellazioni di dati nel Database o reports basati su query/ordinamenti tabelle etc.

    Tutto questo è trasparente all'applicazione,  che non sa che formato hanno i dati e come SQLServer ci interagisce. Nel caso stai sviluppando e testando un'applicazione o intendi usare un DB locale, non dovendo condividere o accedere ai dati da remoto, non è necessario impostare Porte/Protocolli di rete etc. Sarebbe una complicazione inutile.

    Quindi sul proprio PC, una volta installato SQLExpress, girano 3 servizi (Server/Agent/Browser) di SQLServer che sono pronti ad “intercettare” comandi/queries provenienti dalle varie applicazioni che sono state nel frattempo avviate a loro volta..

    Per sviluppare l'app in VS, (che sia VBnet, C# etc) devi aggiungere un'origine dati, prima di fare riferimenti ad oggetti tipo Dataset/TableAdapters etc. Poi devi effettuare una Connessione ai dati stessi usando una stringa che permette a SQLServer di aprire i Master Data File (.MDF) di tuo interesse, specificando locazione etc. A questo punto in VS puoi “testare” se la connessione funziona,  e quindi usare i vari comandi SQL sul DB per poi chiudere la connessione allo stesso.. 

    A questo punto, se il test connessione non funziona, ottieni il relativo messaggio d'errore, e l'app non girerà. I miei errori li ho già riportati..

    Da quanto capisco il problema è che sul PC puoi avere n installazioni di SQLServers di varie versioni, ed all'installazione del primo avrai un'istanza chiamata SQLEXPRESS, al secondo SQLEXPRESS01 e così via..

    Nella stringa di connessione ci deve essere il riferimento a quale istanza di Server ti vuoi appoggiare con la tua app, e poi il tipo di dati, locazione etc. Se la tua app punta ad un Server che è stato disinstallato (ora io ho solo la versione 2022, per cui l'istanza si chiama solo SQLEXPRESS), arriva il messaggio che il Test Connessione è fallito.

    L'esempio di stringa di connessione è questo:

    Dim strconn As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + percorso_dati + "NomeDB.mdf" +
               ";Integrated Security=True;Connect Timeout=30"

    Ma non trovo in modo alcuno la possibilità d'impostare l'Istanza di SQLServer che ho adesso sul mio PC…! Ed il test fallisce sempre.

    Per accedere alla maschera di Test Connessione ci sono vari modi, che portano tutti allo stesso punto. Io in VS faccio così: menu Progetto/Aggiungi Origine Dati/ tipo: Database/Dataset/nuova Connessione. Giungi alla maschera di Test Connessione, usi “Sfoglia” per puntare al file MDF locale e poi premi “Test Connessione”… e fallisci, perchè dice che invochi un'istanza di SQLServer che non c'è sul PC.. Ma non so come farlo puntare all'Istanza attualmente disponibile.

    Scusa se mi sono dilungato, ma spero di avere fatto capire i passaggi che ho fatto..

    Ogni suggerimento è gradito, nel frattempo sto provando a fare di tutto per scoprire dove cambiare la famosa stringa. Grazie!

  • Re: Passaggio a SQLServer Express 2022

  • Re: Passaggio a SQLServer Express 2022

    Questa sopra è la maschera di Test Connessione a cui mi riferisco

  • Re: Passaggio a SQLServer Express 2022

    Come ti dicevo io purtroppo non uso mai l'aggiunta di “origine dati”, per cui posso esserti utile ma fino ad un certo punto.

    Comunque io proverei a scegliere “Microsoft SQL Server” dalla lista, anzichè “File di database di Microsoft SQL Server”

  • Re: Passaggio a SQLServer Express 2022

    Ho provato ma senza successo, ma non credo sia giusto comunque.. Nella Finestra Test esplicitamente ti dice di usare File di Database..etc.. incluso SQLExpress… Per puntare ad un file locale

    La cosa incredibile è che non è spiegato da nessuna parte come invocare un'Istanza piuttosto che un'altra di SQLServer Express.. Dove vado a selezionare la versione 2022 invece che una precedente (dal 2008, primo sviluppoapp, in avanti).. Mah..

  • Re: Passaggio a SQLServer Express 2022

    Salve,

    forse, e ripeto forse, si puo' provare a vedere https://xprog.blogspot.com/2012/08/visual-studio-2012-change-default-sql.html al fine di modificare l'impostazione standard…

    le origini dati “File di Database”, se non erro troppo, dovrebbero essere gestiti da LocalDB, una “pseudo-istanza” di SQL Server… a mio personale parere una “robaccia” al pari delle User Instances… ma comunque….

    se invece mi sto sbagliando, allora utilizzano il parametro “attachdbfilename=xxx” in apertura del db, che provvede a registrarlo sull'istanza utilizzata… e forse l'indicazione di cui sopra puo' comunque aiutare… non ho provato :D

    come gia' ti hanno indicato, cio' effettivamente significa utilizzare un db engine piu' che ridotto, penso non accetti neanche connessioni multiple… le User Instances, con un po' di accrocchi lo permettevano anche, ma restano (IMVHO) una robaccia… :D

    SE vuoi lavorare con SQL Server, e va piu' che bene anche la versione Express, purtroppo ti tocchera' inparare a giocare con tutto il suo stack… SE, invece, ti basta effettivamente uno storage locale alla macchina che esegue il programma, SQLite puo' andare piu' che bene e non avrai tutte le “problematiche” di gestione di un DBMS… ma non ne avrai neache in “benefici" (sempre che siano necessari) :D

    salutoni romagnoli
    – 
    Andrea

  • Re: Passaggio a SQLServer Express 2022

    Grazie Andrea, il link da te indicato aggiunge delle info aggiuntive su come tentare di cambiare istanza..

    Ma purtroppo non risolve, tra l'altro neanche a colui che aveva chiesto ed ottenuto risposte su domanda simile alla mia.

    Dici giusto riguardo alla gestione di files locali da perte di (LocalDB)\MSSQLLocalDB, mentre il parametro “attachdbfilename=xxx” credo serva solo a dare indicazione della locazione fisica sul disco del file MDF.

    Quando parlano di “Istanza” si riferiscono a quella che io chiamerei “Versione” di SQLServer Express installata.. Il nome della prima installazione è riferito come SQLEXPRESS, poi SQLEXPRESS01, 02 etc.. Possono convivere nel PC, e le puoi vedere quando disinstalli/reinstalli oppure tramite SQL Server Management Studio (altra applicazione da installare). Il nome dell'istanza è quello sopramenzionato, il numero di versione per SLQexpr2019 sarebbe MSSQL15.SQLEXPRESS, per  SLQexpr2022  MSSQL16.SQLEXPRESS.

    Il problema è dove andare a mettere questo “puntatore” all'istanza che t'interessa.. Non riesco a trovare il modo di farlo ed ottenere delle effettive connessioni ai dati.

    Grazie ancora, continuo a cercare di risolvere. Saluti Milanesi!

    PS: Piuttosto che rimettere mano ad una applicazione del 2008 con questi problemi ed imparare tutto riguardo SQLServer, preferisco riscrivere tutto da capo, con motore integrato tipo Access o SQLite che m'indicava SirJo.. Ci metterei qualche mese in meno!!! Se anche mi faccio un mio DBMS relazionale in ascii, forse impiego comunque meno che impare MS-SQLServer :)

Devi accedere o registrarti per scrivere nel forum
19 risposte