Ieri, come di consueto in questi giorni, stavo programmando Movie Disk Manager e nel refactoring di una classe non ricordavo se un campo all'interno del database avesse delle constraints. Dunque vado nella finestra Server Explorer dell'IDE per vedere la struttura delle tabelle ed i relativi campi e mi rendo conto che non c'è nessuna connessione ad un database access (solo quelle SqlServer Express).
Di conseguenza mi appropinguo all'instante ad aggiungere quest'ultima. Durante la procedura di creazione della connessione mi rendo conto che qualcosa però è cambiato ed invece di comparirmi la finestra di selezione del file .mdb (Figura 1), mi compare una insolita dialog in cui dover specificare la ConnectionString della connessione (Figura 2).
Non essendo questo affatto un problema digito la ConnectionString e dopo aver cliccato su OK mi compare un messaggio di errore di non immediata comprensione (Figura 3): "Format of the initialization string does not conform to specification starting at index 0".
La prima cosa che ho pensato è stata: "Hai sbagliato la stringa di connessione! Sei un pirla, sono passati anni e ancora devi andarla a recuperare da connectionstrings.."
Purtroppo però non è andata come pensavo, dato che una volta copiata la stringa l'errore persisteva.
Sono passato allora ad un metodo alternativo "più manuale" per creare la connessione. Selezionando "other" nella finestra di scelta del database e successivamente il provider (Figura 4) da usare si può accedere direttamente alla famosa finestra di configurazione dei file UDL (Figura 5).
Dopo aver configurato il tutto l'ide restituiva un errore ben noto ai programmatori: "Object Reference not set to an instance of an object"; ma qual'era questo oggetto non instanziato?! di certo non mi potevo mettere a debuggare visual studio 2005 :D! quindi ho fatto l'ultima prova linkando la configurazione ad un file UDL da me creato all'esterno dell'IDE di Visual Studio ma il risultato era il medesimo.
A questo punto non mi rimaneva nient'altro da fare che...googlare! I primi risultati di ricerca erano del tutto insoddisfacenti (anche se da qualche risultato si intuiva che il problema era noto) ma cambiando in seguito keyword ho trovato un post su MSDN che ha risolto tutti i miei problemi.
La colpa era da imputare ai cosiddetti programmi "registry cleaner", che erroneamente avevano cancellato una chiave di registro ProgID all'interno del CLSID del componente "Microsoft OLE DB Provider for Indexing Service".
Evidentemente Visual Studio non trovando il valore all'interno di quella chiave nel primo caso "più automatico" mostrava quella insolita finestra che non portava da nessuna parte, nel secondo caso "più manuale" e forzato aggiungerei, notificava la mancata instanza ad oggetto (sempre poco intuitivo come errore ma di certo più sensato).
Dopo aver inserito la chiave ed assegnato il valore predefinito, ripetendo la procedura dall'IDE tutto è andato a buon fine svolgendosi come al solito.
Se anche voi vi siete ritrovati nello stesso inconveniente la soluzione è la seguente (tradotto dal post su MSDN in lingua inglese):
- Avviate regedit.exe;
- Accedete alla chiave "HKEY_CLASSES_ROOT\CLSID\{F9AE8980-7E52-11d0-8964-00C04FD611D7}";
- Se c'è una sotto-chiave "ProgID", allora il problema è di natura differente e questo metodo risolutivo non è valido.
Altrimenti, modificate il registro aggiungendo la chiave ProgID:
- Tasto destro sul nodo principale e selezionate "Nuova > Chiave";
- Assegnatele il nome "ProgID";
- Accedete alla chiave e modificate il valore di default ("(Default)") con doppio clic su di esso;
- Digitale il valore "MSIDXS.1" e confermate;
Ora chiudete il l'editor di registro e riprovate la procedura con Visual Studio che dovrebbe andare a buon fine; altrimenti disconnettetevi e riconnettetevi, riprovate con VS e tutto andrà liscio.
Aggiornamento 5 min dopo la pubblicazione
Purtroppo nonostante ho ri-eliminato la chiave di registro ProgID il problema non si ripresenta (misteri dell'informatica) e quindi non posso fornirvi le immagini necessarie che ho mensionato nel post (che è stato scritto ovviamente dopo aver risolto il problema..). Mi spiace..in ogni caso sono sicuro di essere stato abbastanza esauriente con il descrivere i sintomi del problema da potervi rendere conto, anche senza immagini, se ne siete affetti.
2 commenti:
Grande! Ti sono debitore di una birra!
Sei grandioso !!!!!
Grazie mille problemone risolto
Grazie
Posta un commento