ciao, era meglio se postavi in c# che viene piu visitato, qui è solo per problemi relativi all'ide
onnectionStrings[1] si riferisce alla SECONDA stringa di connessione (se mai esiste), gli indici partono da 0 non da 1. Non so se è voluto o è come credo, un errore di distrazione.
ServerLocationAndName conserva la stringa di connessione? questo tipo di approccio (due posti per memorizzare un informazione) è troppo prono a errori runtime: conserva la stringa in un solo posto e prendila sempre da li. Il file di configurazione è l'ideale mentre quella classe statica di variabili globali è poco OOP.
PS
catch -> throw; è esattamente la stessa cosa di non mettercelo proprio il try catch (provare per credere). Gli errori li catturi quando sai cosa farne delle eccezioni, il throw lo usi quando dopo aver fatto qualcosa nel catch, vuoi che l'errore comunque si propaghi per farlo catturare ANCHE a qualcun altro ma se vuoi solo catturare e rilanciare l'eccezione non serve fare cosi il clr lo fa gia in automatico.