Connessione a SQL Server da applicazione WPF
Quote from dodiro on 26/08/2020, 12:16Premessa
ho realizzato un’applicazione Desktop WPF che utilizza un database SQL Server. Sia il database che le tabelle di riferimento sono state create in ambiente SSMS e quindi il database non si trova all’interno dell’applicazione WPF. Pertanto, per interagire con la banca dati…
- Mi avvalgo della tecnologia Linq To SQL.
- In particolare, utilizzando la connessione con il database creata in Visual Studio, ho trasferito le tabelle di mio interesse nell’area di progettazione, in modo da creare la classe DataContext con tutte le varie classi che contengono i dati delle singole tabelle. In buona sostanza, in Esplora soluzioni è presente il file .dbml che contiene tutti gli elementi che mi consentono di accedere database.
- Implicitamente facendo quest’operazione, nel file config sono automaticamente creati gli elementi <connectionstring> con i vari attributi che sistema richiede per gestire la connessione con il database.
Problema
In tempi recenti, ho deciso di aggiornare la mia struttura hardware acquistando un nuovo computer e per questo motivo ho iniziato aggiornare il nuovo PC con tutto il software di mio interesse, tra cui ovviamente Visual Studio e SQL Server 2017, unitamente a SSMS versione 18.6.
Ovviamente, per utilizzare l’applicazione indicata nella premessa, ho aggiornato il database di SQL Server eseguendo un ripristino del file .bak del database originale con tutte le sue tabelle.
Poi, in Visual Studio e nell’area di debug, ho avviato il file .sln relativo all’applicazione WPF per verificare che tutto funzionasse correttamente. Come sempre in questi casi le mie speranze non si sono avverate ed infatti il processo ha subito rilevato un problema di connessione con il database.
Esaminando la stringa di connessione nel file App.config, ho visto che nella proprietà connectionString alla voce Data Source viene correttamente assegnato un punto (.), ad indicare che il database si trova in locale…
<add name="Money20.Properties.Settings.Money20DBConnectionString"
connectionString="Data Source=.;Initial Catalog=Money20DB;Integrated
Security=True" providerName="System.Data.SqlClient" />Per cercare di risolvere il problema ho copiato il nome del server indicato nella finestra Connetti al server di SQL Server e ho sostituito questo dato con il punto.
Bene… Così facendo ora tutto funziona, ma mi interesserebbe comprendere perché nel mio caso il nuovo SQL server non mi accetta il valore punto al posto del nome del server e soprattutto che cosa debba fare per rimediare a questo inconveniente.
Grazie per l’aiuto.
Premessa
ho realizzato un’applicazione Desktop WPF che utilizza un database SQL Server. Sia il database che le tabelle di riferimento sono state create in ambiente SSMS e quindi il database non si trova all’interno dell’applicazione WPF. Pertanto, per interagire con la banca dati…
- Mi avvalgo della tecnologia Linq To SQL.
- In particolare, utilizzando la connessione con il database creata in Visual Studio, ho trasferito le tabelle di mio interesse nell’area di progettazione, in modo da creare la classe DataContext con tutte le varie classi che contengono i dati delle singole tabelle. In buona sostanza, in Esplora soluzioni è presente il file .dbml che contiene tutti gli elementi che mi consentono di accedere database.
- Implicitamente facendo quest’operazione, nel file config sono automaticamente creati gli elementi <connectionstring> con i vari attributi che sistema richiede per gestire la connessione con il database.
Problema
In tempi recenti, ho deciso di aggiornare la mia struttura hardware acquistando un nuovo computer e per questo motivo ho iniziato aggiornare il nuovo PC con tutto il software di mio interesse, tra cui ovviamente Visual Studio e SQL Server 2017, unitamente a SSMS versione 18.6.
Ovviamente, per utilizzare l’applicazione indicata nella premessa, ho aggiornato il database di SQL Server eseguendo un ripristino del file .bak del database originale con tutte le sue tabelle.
Poi, in Visual Studio e nell’area di debug, ho avviato il file .sln relativo all’applicazione WPF per verificare che tutto funzionasse correttamente. Come sempre in questi casi le mie speranze non si sono avverate ed infatti il processo ha subito rilevato un problema di connessione con il database.
Esaminando la stringa di connessione nel file App.config, ho visto che nella proprietà connectionString alla voce Data Source viene correttamente assegnato un punto (.), ad indicare che il database si trova in locale…
<add name="Money20.Properties.Settings.Money20DBConnectionString"
connectionString="Data Source=.;Initial Catalog=Money20DB;Integrated
Security=True" providerName="System.Data.SqlClient" />
Per cercare di risolvere il problema ho copiato il nome del server indicato nella finestra Connetti al server di SQL Server e ho sostituito questo dato con il punto.
Bene… Così facendo ora tutto funziona, ma mi interesserebbe comprendere perché nel mio caso il nuovo SQL server non mi accetta il valore punto al posto del nome del server e soprattutto che cosa debba fare per rimediare a questo inconveniente.
Grazie per l’aiuto.
Quote from sabrina_c on 27/08/2020, 15:36Ciao,
è strano che prima funzionasse e adesso no, è ancor più strana la faccenda del punto... non mi era mai capitato di usare questa notazione e non sapevo esistesse (e lavoro con sqlserver dal 2000)...
Se ne impara una al giorno.
Solitamente per il server locale si usa localhost come nome del server.
Però per quel che riguarda il fatto che non ti si connettesse, potrebbero esservi dei problemi sulla security del database proveniente da un altro PC, perché ovviamente la mappatura degli utenti del nuovo PC potrebbe avere degli identificativi diversi da quelli del Vecchio PC e quindi potrebbe non riconoscere correttamente tali utenti, anche se presumo che installando il database tu abbia mappato come administrator il tuo utente e i Builtin Administrator ed attivato il mixed mode.
C'è anche un altra cosa strana nella tua connection string, non vedo il "Persist security info = true", può essere che il LinqToSql apra e chiuda la connection ad ogni chiamata sql, ma se così non è senza quel parametro potresti trovarti strani errori se ci sono query composite (ovvero più command eseguiti sulla stessa connection) perché senza quel parametro perde la password da una chiamata alla successiva.
saluti
Ciao,
è strano che prima funzionasse e adesso no, è ancor più strana la faccenda del punto... non mi era mai capitato di usare questa notazione e non sapevo esistesse (e lavoro con sqlserver dal 2000)...
Se ne impara una al giorno.
Solitamente per il server locale si usa localhost come nome del server.
Però per quel che riguarda il fatto che non ti si connettesse, potrebbero esservi dei problemi sulla security del database proveniente da un altro PC, perché ovviamente la mappatura degli utenti del nuovo PC potrebbe avere degli identificativi diversi da quelli del Vecchio PC e quindi potrebbe non riconoscere correttamente tali utenti, anche se presumo che installando il database tu abbia mappato come administrator il tuo utente e i Builtin Administrator ed attivato il mixed mode.
C'è anche un altra cosa strana nella tua connection string, non vedo il "Persist security info = true", può essere che il LinqToSql apra e chiuda la connection ad ogni chiamata sql, ma se così non è senza quel parametro potresti trovarti strani errori se ci sono query composite (ovvero più command eseguiti sulla stessa connection) perché senza quel parametro perde la password da una chiamata alla successiva.
saluti
Quote from dodiro on 27/08/2020, 17:34Ho fatto una ricerca su Internet e ho trovato un articolo che sembra risolvere il problema e che allego. Anche se onestamente non ho compreso bene il motivo, dopo avere eseguito le istruzioni indicate ora la connessione con il punto (.) funziona ed infatti la HomePage dell'applicazione accede al database ed evidenzia i movimenti del conto. Comprendere in profondità le logiche di funzionamento di SQL Server richiede una professionalità che normalmente uno sviluppatore WPF non possiede.
Ho fatto una ricerca su Internet e ho trovato un articolo che sembra risolvere il problema e che allego. Anche se onestamente non ho compreso bene il motivo, dopo avere eseguito le istruzioni indicate ora la connessione con il punto (.) funziona ed infatti la HomePage dell'applicazione accede al database ed evidenzia i movimenti del conto. Comprendere in profondità le logiche di funzionamento di SQL Server richiede una professionalità che normalmente uno sviluppatore WPF non possiede.
Uploaded files:
- You need to login to have access to uploads.
Quote from sabrina_c on 29/08/2020, 18:44Ottimo che tu abbia risolto, grazie per il link che sarà sicuramente utile ad altri.
Riguardo la logica funzionale di SQL Server, quando installi un nuovo server e fai backup e restore dal vecchio al nuovo server, il tuo database viene registrato dal Master Database del nuovo server e tutte le informazioni che riguardano permessi, utenti ed altri "accessori" che sono custoditi all'interno del database Master (Utenti, gruppi, permessi, ecc.) vanno rimappati semplicemente perché rigenerandoli probabilmente avranno degli ID diversi e quindi non saranno coerenti con quelli del database Restorato.
E' anche buona cosa, cancellare e ripristinare i permessi concessi agli utenti, così come è opportuno, in linea generale, evitare l'obbligo che gli utenti siano Administrator del server per usare l'applicazione.
Saluti
Ottimo che tu abbia risolto, grazie per il link che sarà sicuramente utile ad altri.
Riguardo la logica funzionale di SQL Server, quando installi un nuovo server e fai backup e restore dal vecchio al nuovo server, il tuo database viene registrato dal Master Database del nuovo server e tutte le informazioni che riguardano permessi, utenti ed altri "accessori" che sono custoditi all'interno del database Master (Utenti, gruppi, permessi, ecc.) vanno rimappati semplicemente perché rigenerandoli probabilmente avranno degli ID diversi e quindi non saranno coerenti con quelli del database Restorato.
E' anche buona cosa, cancellare e ripristinare i permessi concessi agli utenti, così come è opportuno, in linea generale, evitare l'obbligo che gli utenti siano Administrator del server per usare l'applicazione.
Saluti