Installazione windows application con db SqlExpress

giovedì 22 ottobre 2009 - 11.12

katanza Profilo | Newbie

Buongiorno a tutti.

Ho un problema su cui sto sbattendo la testa da giorni e al quale non trovo soluzione. Premetto che non sono un esperto nè di C# nè di SqlExpress.

Dunque, la situazione è questa: sto sviluppando una windows application che deve girare stand alone. Subito mi ero appoggiato ad un db access, poi ho avuto un po' di problemi ed ho deciso di passare a SqlExpress. Sul computer dove sviluppo (PC1) funziona tutto perfettamente. Ora a me serve poter mettere quest'applicazione anche su altri pc, quindi ho creato il mio bel progettino di distribuzione mettendo SqlExpress nei requisiti.
Spostandomi quindi sul PC2, lancio l'installazione e va tutto a buon fine. Ma quando cerco di aprire l'applicazione mi da l'errore di connessione: "error: 26 - Errore nell'individuazione del server/dell'istanza specificata".
Ho provato anche diverse "configurazini" della stringa di connessione in base ad alcune informazioni che ho trovato in giro per il web, ma non è cambiato nulla.

Allego un po' di informazioni, sperando che bastino a spiegare meglio la mia condizione.
PC1
- l'istanza si appoggia sul file C:\Progetto1\inc\miodb.mdf
- nel progetto di distribuzione includo il file miodb.mdf nella cartella [Output principale]\inc
- la stringa di connessione è: DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\inc\miodb.mdf;Database=miodb; Persist Security Info=True

PC2
- scelgo di installare su C:\Programmi\Progetto1
- mi crea la cartella C:\Programmi\Progetto1\inc e dentro c'è il file miodb.mdf

Se manca qualche informazione sono ovviamente a disposizione e spero che qualcuno possa aiutarmi!

Grazie mille!

basicdany Profilo | Expert

ciao, anchio mi sto imbattendo nel tuo spesso problema, vediamo di capirci qualcosa insieme: vedi post: "leggi Connessione database sql server 2005 come collegarsi da pc in rete"

ciao

katanza Profilo | Newbie

Ho letto il post che mi hai indicato, ma il mio problema è diverso: io non devo collegarmi ad un server, io voglio il db in locale sul client perchè devo poter utilizzare l'applicazione anche senza connessioni di rete.

basicdany Profilo | Expert

Ciao, in locale e la stessa stringa di connessione, solo che al posto dell'indirizzo devi mettere il nome dell'istanza di sql server,:

STRINGA CONNESSIONE DA REMOTO:Data Source=192.168.1.50\SQLEXPRESS;Initial Catalog=GestioneVenditaImmobileSql;Persist Security Info=True;User ID=sa;Pwd=saData Source=192.168.1.50\SQLEXPRESS;Initial Catalog=GestioneVenditaImmobileSql;Persist Security Info=True;User ID=sa;Pwd=sa

STRINGA CONNESSIONE LOCALE:Data Source=danportatile\SQLEXPRESS;Initial Catalog=GestioneVenditaImmobileSql;Persist Security Info=True;User ID=sa;Pwd=saData Source=192.168.1.50\SQLEXPRESS;Initial Catalog=GestioneVenditaImmobileSql;Persist Security Info=True;User ID=sa;Pwd=sa

fammi sapere ciao


luxsor Profilo | Guru

Ciao ragazzi,
se non riuscite a connettervi a sql server da locale, dovete controllare se il servizio SQL Express è in esecuzione, poi se state utilizzando il nome dell'istanza anziche il numero di porta, assicuratevi che lo è anche SQLBrowser.

Per la connessione da remoto, bisogna configurare SQL Express in modo che accetti connessioni remote, stabilire una porta TCP quindi disabilitare quella dinamica.




------------------------
Luxsor

katanza Profilo | Newbie

Sembra funzionare! Ho controllato che i servizi fossero attivi (startandoli in caso contrario) ed ora mi parte anche sul client!

Faccio un po' di prove anche su altri pc e vi faccio sapere!

basicdany Profilo | Expert

ciao, anchio come ti dicevo ho un po sbattuto la testa, però alla fine ho capito bene come funziona sql server.

katanza Profilo | Newbie

Come non detto!! O meglio, non funziona su tutti i pc! Ne ho provati 2, apparentemente entrambi senza sqlserver, ma su uno funziona, mentre sull'altro continua a non funzionare. E non importa se i servizi ci sono o meno!

Mi viene un dubbio: è sufficiente mettere sql server express come pre-requisito? Perchè non si blocca l'istallazione se non lo trova? E se lo istalla, devo configurarlo in qualche modo?

Questo è l'errore che mi da:
System.Data.SqlClient.SqlException: Si è verificato un errore di rete o specifico dell'istanza mentre si cercava di stabilire una connessione con il server SQL. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e che il server SQL sia configurato in modo da consentire connessioni remote. (provider: Interfacce di rete SQL, error: 26 - Errore nell'individuazione del server/dell'istanza specificata)

basicdany Profilo | Expert

secondo me a solo questione di permessi tra i pc, dovresti verificare che i pc si vedino in rete fra loro, verificare che sql sia abilitato correttamente per le connessione remoto, dopo di che dovrebbe funzionare, io lo provato fra XP, con sql server 2005 ti ripeto... se hai altri sistemi operativi o un altro sql, e da vedere.

fammi sapere ciao

katanza Profilo | Newbie

Ma io non voglio che si vedano tra loro! L'applicazione deve poter girare in locale senza alcuna connessione di rete. E' proprio questo il mio problema!

luxsor Profilo | Guru

Allora devi installare sul pc oltre al programma anche SQL Server, quindi modificare nella stringa di connessione il nome dell'istanza di SQL.


------------------------
Luxsor

katanza Profilo | Newbie

OK, ma non basta metterlo tra i prerequisiti?

luxsor Profilo | Guru

Il tuo problema sta nel fatto che:
se inserisci SQL Server Express nei prerequistiti, durante l'installazione del tuo programma ti verrà installato anche SQL, ma il problema è che non è detto che per ogni installazione SQL Express ti viene assegnato lo stesso nome dell'istanza, quindi se la stringa di connessione è fissa, riscontrerai sempre questo problama.
Quindi assicurati che sul pc dove tu installi il programma, sia presente sql server, attivo il servizio sqlbrowser e controlla se nella tua stringa di connessione e impostato quel nome dell'istanza.

Fammi sapere


------------------------
Luxsor

katanza Profilo | Newbie

Mi sta bene. Ma a questo punto chiedo:
- come faccio ad impostare il nome dell'istanza in fase di istallazione (se si può fare)?
- perchè non ci sono i servizi che mi indichi in pc dove non è installato sql server e il programma gira?

luxsor Profilo | Guru

>- come faccio ad impostare il nome dell'istanza in fase di istallazione
>(se si può fare)?
Inserisci nel programma una form di configurazione che ti permette di configurare l'istanza SQL.

>- perchè non ci sono i servizi che mi indichi in pc dove non
>è installato sql server e il programma gira?
Impossibile senza il servizio SQL Server, infatti non può connetterti a nessuna istanza SQL se non è avviato tale servizio, a patto che l'istanza a cui ti connetti è collegata in rete.
Per il servizio SQLBrowser allora si, con tale servizio attivato puoi utilizzare il Nome per accedere all'istanza anzichè la porta TCP.




------------------------
Luxsor

katanza Profilo | Newbie

Riesci a mandarmi il codice per la configurazione dell'istanza?

luxsor Profilo | Guru

Non c'è un codice per la configurazione dell'istanza SQL.
Devi solo creare la stringa di connessione dinamicamente, cioè rendendo "Data Source" variabile, quindi lo devi inserire il cliente.
A questo punto lo salvi da qualche parte (registro o file ecc..).

Così ad ogni installazione con l'istanza divera, basterà andare a configurare il nome dell'istanza installata.



------------------------
Luxsor

katanza Profilo | Newbie

Ma scusa, il datasource non è relativo se metto ".\sqlexpress"?

luxsor Profilo | Guru

>Ma scusa, il datasource non è relativo se metto ".\sqlexpress"?
Questo funziona se l'istanza SQL si chiama sqlexpress!
non è detto che si chiami sempre così.

Scusami ma funziona?



------------------------
Luxsor

katanza Profilo | Newbie

L'ho provato su 2 pc, che non avevano sql server istallato (almeno, ho guardato sia nei servizi, sia in "Istallazione applicazioni" e non c'era nulla): su uno ha funzionato, sull'altro no dandomi l'errore che ho postato prima.

Allora come faccio a sapere qual'è il nome dell'istanza? In teoria non dovrebbe prendere quella che è archiviata nel file mdf che gli attacco?

luxsor Profilo | Guru

>L'ho provato su 2 pc, che non avevano sql server istallato (almeno,
>ho guardato sia nei servizi, sia in "Istallazione applicazioni"
>e non c'era nulla): su uno ha funzionato, sull'altro no dandomi
>l'errore che ho postato prima.
Postami la stringa di connessione che utilizzi.

>Allora come faccio a sapere qual'è il nome dell'istanza? In teoria
>non dovrebbe prendere quella che è archiviata nel file mdf che
>gli attacco?
Attaccando al ogni installazione il file MDF rendi indipendenti tutte le installazioni del programma sul singolo PC.

Tu il motore di SQL lo installi dai prerequisiti?
Scarica e Installa Microsoft SQL Server Management Studio sul PC che non funziona:
http://www.microsoft.com/downloadS/details.aspx?displaylang=it&FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796


Comandi Istanza SQL:
http://msdn.microsoft.com/it-it/library/ms180965.aspx
http://msdn.microsoft.com/it-it/library/ms187598.aspx
http://msdn.microsoft.com/it-it/library/ms189250.aspx

Controlla se alcuni di questi servizi sono attivi sul tuo PC:
http://technet.microsoft.com/it-it/library/ms143673(SQL.90).aspx


------------------------
Luxsor

katanza Profilo | Newbie

>>L'ho provato su 2 pc, che non avevano sql server istallato (almeno,
>>ho guardato sia nei servizi, sia in "Istallazione applicazioni"
>>e non c'era nulla): su uno ha funzionato, sull'altro no dandomi
>>l'errore che ho postato prima.
>Postami la stringa di connessione che utilizzi.

Al momento la stringa è (quella che su un pc funziona):
Data Source=.\SQLEXPRESS; Initial Catalog=miodb; Persist Security Info=true; User ID=utente; Password=password;

Ma ho provato anche questa senza successo:
Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\inc\miodb.mdf; Database=miodb; Persist Security Info=true; User ID=utente; Password=password;

>
>>Allora come faccio a sapere qual'è il nome dell'istanza? In teoria
>>non dovrebbe prendere quella che è archiviata nel file mdf che
>>gli attacco?
>Attaccando al ogni installazione il file MDF rendi indipendenti
>tutte le installazioni del programma sul singolo PC.

Cosa intendi per "rendi indipendenti"? Quello che vorrei io è avere il db in locale (quindi senza connessioni di rete) e rendere il più possibile trasparente l'istallazione dell'applicazione: dovrò darla ad utenti non proprio esperti!! Se mi conviene prendere un'altra strada, dimmelo pure!

>Tu il motore di SQL lo installi dai prerequisiti?

Si. O almeno, l'ho selezionato come prerequisito, poi se lo faccia davvero o no è un'altra storia!

>Scarica e Installa Microsoft SQL Server Management Studio sul
>PC che non funziona:
>http://www.microsoft.com/downloadS/details.aspx?displaylang=it&FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796
>
>
>Comandi Istanza SQL:
>http://msdn.microsoft.com/it-it/library/ms180965.aspx
>http://msdn.microsoft.com/it-it/library/ms187598.aspx
>http://msdn.microsoft.com/it-it/library/ms189250.aspx
>
>Controlla se alcuni di questi servizi sono attivi sul tuo PC:
>http://technet.microsoft.com/it-it/library/ms143673(SQL.90).aspx
>
>
>------------------------
> Luxsor

luxsor Profilo | Guru

>Al momento la stringa è (quella che su un pc funziona):
>Data Source=.\SQLEXPRESS; Initial Catalog=miodb; Persist Security
>Info=true; User ID=utente; Password=password;
Vedo che utilizzi l'autenticazione SQL (tramite User ID e Password). OK

1° Per utilizzare tale autenticazione, la devi configurare manualmente, impostando "Authentication Mix Mode", quindi dubito che installando il motore sql dai prerequisiti, ti abiliti per default questa funzionalità!!!. Vabbè

>Ma ho provato anche questa senza successo:
>Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\inc\miodb.mdf;
>Database=miodb; Persist Security Info=true; User ID=utente; Password=password;

|DataDirectory| non va scritta così: AttachDbFilename=C:\Programma\DB\inc\miodb.mdf;
devi impostare il Path dove si trova il file mdf, dopodichè abilitare i permessi in "Write" per tale path.

>Cosa intendi per "rendi indipendenti"? Quello che vorrei io è
>avere il db in locale (quindi senza connessioni di rete) e rendere
>il più possibile trasparente l'istallazione dell'applicazione:
>dovrò darla ad utenti non proprio esperti!! Se mi conviene prendere
>un'altra strada, dimmelo pure!
Se tu ad ogni installazione del tuo programma, assegni un file MDF fai in modo che ogni programma è indipendete, così non condivide lo stesso DB.
Se ho 2 PC, installo su entrambi il programma; facendo questo ho un file MDF sul PC1 e un altro file MDF sul PC2.
E chiaro questo.


>
>>Tu il motore di SQL lo installi dai prerequisiti?
>
>Si. O almeno, l'ho selezionato come prerequisito, poi se lo faccia
>davvero o no è un'altra storia!

in teoria lo dovresti avere installato sui PC dove installa il programma.



------------------------
Luxsor

katanza Profilo | Newbie

>Vedo che utilizzi l'autenticazione SQL (tramite User ID e Password).
>OK
>1° Per utilizzare tale autenticazione, la devi configurare manualmente,
>impostando "Authentication Mix Mode", quindi dubito che installando
>il motore sql dai prerequisiti, ti abiliti per default questa
>funzionalità!!!. Vabbè

Quindi mi conviene usare l'autenticazione di windows? Per me è lo stesso

>|DataDirectory| non va scritta così: AttachDbFilename=C:\Programma\DB\inc\miodb.mdf;
>devi impostare il Path dove si trova il file mdf, dopodichè abilitare
>i permessi in "Write" per tale path.

Questa configurazione me l'ha creata usando il wizard e dicendogli di agganciare un file MySql piuttosto che un'istanza.

>Se tu ad ogni installazione del tuo programma, assegni un file
>MDF fai in modo che ogni programma è indipendete, così non condivide
>lo stesso DB.
>Se ho 2 PC, installo su entrambi il programma; facendo questo
>ho un file MDF sul PC1 e un altro file MDF sul PC2.
>E chiaro questo.

Ed è quello che mi interessa. Il database non è unico come in una normale applicazione client/server, ma è specifico per ogni istallazione. Ecco anche perchè non mi servono le connessioni di rete.


>in teoria lo dovresti avere installato sui PC dove installa il
>programma.

Ma non lo fa in automatico? Allora perchè me lo propone nei prerequisiti?

Se reputi che uscire da questa situazione sia troppo complicato e ci sia invece una strada più drastica, ma più efficace (che ne so, usare un altro db... che non sia Access però, già fatto!!) dimmelo pure.
Anzi, facciamo così, ti giro la questione in un altro modo: cosa useresti tu per sviluppare un'applicazione standalone di inserimento dati che mi premetta poi di farne statistiche e report e che sia "facilmente" istallabile su n macchine anche da utenti non esperti. Spero di essermi spiegato...

luxsor Profilo | Guru

>Quindi mi conviene usare l'autenticazione di windows? Per me
>è lo stesso
Sarebbe un tantino più facile.

>Ed è quello che mi interessa. Il database non è unico come in
>una normale applicazione client/server, ma è specifico per ogni
>istallazione. Ecco anche perchè non mi servono le connessioni
>di rete.
OK

>Ma non lo fa in automatico? Allora perchè me lo propone nei prerequisiti?
In teoria dovrebbe, a patto che sei connesso ad internet.

>Anzi, facciamo così, ti giro la questione in un altro modo: cosa
>useresti tu per sviluppare un'applicazione standalone di inserimento
>dati che mi premetta poi di farne statistiche e report e che
>sia "facilmente" istallabile su n macchine anche da utenti non
>esperti. Spero di essermi spiegato...

Una cosa semplice la otteresti con Access, ma non lo vuoi utilizzare!!
Sinceramente io per applicazioni "meno complesse" ho sempre utilizzato Access, invece per quelle "più complesse" SQL Server, quindi non ti saprei dire, dipenda dalla complessità della tua applicazione.

Ti consiglio di scaricare manualmente SQL Server Express sul PC che non funziona per vedere se è quello il problema.



------------------------
Luxsor

katanza Profilo | Newbie

Sul pc dove l'ho istallato non c'è nessun servizio di sqlserver (o sqlexpress) nè tanto meno lo presenta tra le applicazioni istallate (pannello di controllo -> istallazione applicazioni). Ne deduco quindi che il fatto di averlo messo tra i prerequisiti non ha alcun effetto! Non esiste una sorta di istallazione "client" da implementare nella pacchetto di istallazione?

luxsor Profilo | Guru

Scaricalo da qua:
http://www.microsoft.com/downloads/details.aspx?displaylang=it&FamilyID=3181842a-4090-4431-acdd-9a1c832e65a6


------------------------
Luxsor

katanza Profilo | Newbie

E poi?

luxsor Profilo | Guru

Installa SQL Server e il tuo programma.
Vedi se funziona con quella stringa di connessione.



------------------------
Luxsor

basicdany Profilo | Expert

ciao, mi sono perso qualche passaggio, ma ha funzionato poi la connessione al db sql server? IO SONO RIUSCIUTO GRAZIE AL VOSTRO AIUTO, TUTTO OK!

katanza Profilo | Newbie

Io ci sto ancora sbattendo la testa! Ho trovato un progettino per l'istallazione manuale di sqlserver, ma adesso mi da problemi sull'utenza: se gli lascio sa mi dice che la password non rispetta i criteri di sicurezza (ho provato "sa", "sa_XX#123" ma niente!), se invece gli metto un mio utente non riesce a crearmelo!!

borgo79 Profilo | Newbie

salve a tutti.

purtroppo non ho una soluzione, anzi... io sono ancora più in confusione.

scenario
ho un'applicazione vb.net con database sql server. non ho alcun controllo sui PC di destinazione del programma, perché il software viene venduto tramite internet.

qualcuno di voi ha un link ad un tutorial dove si spiega come fare partendo da uno scenario del genere?

per conto mio vi lascio un link che potrebbe essere utile, riguardo la creazione del database sul PC di destinazione:
http://msdn.microsoft.com/en-us/library/49b92ztk%28VS.80%29.aspx

luxsor Profilo | Guru

X ROBERTO:
>Io ci sto ancora sbattendo la testa! Ho trovato un progettino per l'istallazione manuale di sqlserver, ma adesso mi da problemi sull'utenza: se gli >lascio sa mi dice che la password non rispetta i criteri di sicurezza (ho provato "sa", "sa_XX#123" ma niente!), se invece gli metto un mio utente >non riesce a crearmelo!!
Ti consiglio di non utilizzare l'account "sa", createne uno nuovo:
http://msdn.microsoft.com/it-it/library/aa337562.aspx
se utilizzi l'autenticazione SQL server imposta l'autenticazione "Mixed Mode"

X FRANCESCO:
Se utilizzi anche tu SQL Server e vuoi distribuire oltre che all'applicazione anche il DB, devi inserire nel pacchetto di installazione SQL Express e creati degli script di configurazione per i rispettivi utenti e tabelle.




------------------------
Luxsor

borgo79 Profilo | Newbie

Grazie Luxsor,
quel link che ho postato fa al caso mio?

L'unico dubbio che ho riguarda la stringa di connessione al database, come faccio a modificarla mettendo il giusto percorso/server?

luxsor Profilo | Guru

Per quanto riguarda la stringa di connessione dai un occhiata qui:
http://www.connectionstrings.com/

tieni presente che se il DB non deve funzionare il rete, quindi in localhost, devi impostare solo l'istanza SQL.


------------------------
Luxsor

borgo79 Profilo | Newbie

>tieni presente che se il DB non deve funzionare il rete, quindi in localhost, devi impostare solo l'istanza SQL.

chiedo davvero venia, ma con ms sql server ho cominciato oggi. cosa si intende? che non mi occorre user e password? di default sql server express non la prevede?

luxsor Profilo | Guru

No, intendevo che se l'istanza SQL Server risiede sul PC su cui deve girare il software, il Data Source nella stringa di connessione sarà così:
Data Source=.\SQLExpress;Integrated Security=true; AttachDbFilename=C:\directory\miodb.mdf;User Instance=true;
per connessioni con Window Autentication.

Se invece possiedi un Account SQL Server, bisogna inserire nella stringa di connessione anche User ID e Password.



------------------------
Luxsor

borgo79 Profilo | Newbie

ok, luksor. ti ringrazio davvero molto perché sto impazzenda da stamattina.

la procedura dunque sarà questa:

creo un pack di installazione con sql server express edition. in questo pacchetto di installazione aggiungo una Custom Action che creerà all'interno del server mssql il database.

come stringa di connessione adotterò quella che mi hai fornito.

spero sia tutto giusto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5