Error 26:Errore nell'individuazione del server/dell'istanza specificat...

lunedì 24 maggio 2010 - 21.17

Joly Profilo | Newbie

Salve a tutti,
sono una new entry, quindi perdonatemi se sbaglierò in qualcosa!

Ho sviluppato un programmino di gestione dati in c#. I dati vengono salvati su db sql server.
La stringa di connessione è:
string strconn = "Data Source=.\\SQLEXPRESS;\r\n AttachDbFilename=\r\n |DataDirectory|\\dbSchedaPaziente.mdf;\r\n Integrated Security=True;\r\n User Instance=True";

Creo un installer con VS 2008 perchè tale software dovrà girare su un altro pc per il momento in locale.
E' la prima volta che mi accingo a creare un installer!!!!
Provo ad installarlo su un altro pc, che chiamerò pc prova, su cui è installato windows Vista.
Sul pc prova ho installato sql express.
L'installer va a buon fine, apro il programmino e tutto ok. Ma quando provo ad accedere al db, salvando dei dati mi viene generato il seguente errore:
"Si è verificato un errore di rete o specifico dell'istanza mentre si cercava di stabilire una connessione con il server SQL. Il serve 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".

ahhh dimenticavo: ho provato ad installare il software su un altro pc su cui ho installato xp e VS 2005 pro e qui tutto ok, l'installazione va buon fine, e l'accesso al db funziona!

Avrei bisogno di un vostro aiuto!
Grazie
Joly

Gluck74 Profilo | Guru

Perdona la domanda, ma è una soluzione web?

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Joly Profilo | Newbie

No non è una soluzione web, è un programmino con delle window form, tramite un click su dei button accedo al db per salvare, aggiornare o cancellare dati.
Joly

Gluck74 Profilo | Guru

ok.

Quando fai dunque il deploy ti porti dietro il file .mdf dei dati e dove lo posizioni?
hai controllato i permessi sia del file che della cartella di destinazione?
Vista è più rognoso di XP

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Joly Profilo | Newbie

Il file .mdf e il file .ldf me lo porto dietro salvandolo nella cartella "setup1" che viene creata all'interno del progetto quando creo l'installer.
In dettaglio:
Dopo aver creato l'installer seguendo questi passi:
1. "File"->"Nuovo progetto" (CTRL+N). Dalla finestra che si apre cercare nello spazio a destra "Altri tipi di progetto"
2. Seleziono "Installazione e distribuzione" , quindi "Progetto di instalazione".
3. Nel menù a tendina alla voce "Soluzione" in basso seleziono "Aggiungi a soluzione".
4. Dall' "Editor del file System" scelgo "Cartella applicazione".
5. . Faccio click col tasto destro nella colonna di destra e seleziono la voce "Aggiungi" -> "Output progetto". Si apre una finestra. Seleziono il progetto giusto dal menù a tendina in alto e la voce "Ouput primario" nella lista, poi clicco su OK.
6. aggiungo il collegamento al desktop

Poi per attaccare il db seguo questi passaggi trovati su internet:
How to Use This Application in Setup Projects
1.Don't forget to copy your data files in your package. Copy them into your application folder. Follow the steps given below.
2.Select the Setup project in the Solution Explorer. Right click on it.
3.Select View--File System Editor.
4.In File System Editor, select the application folder and right click on it.
5.Then, select Add--File.
6.Now, select your data files, and click OK.
7.Rest of the steps to add your application to the setup project, using Custom Actions, are the same as in (Version 1).
A questo punto provo l'installer su vista e non mi funziona l'accesso al db.

Comunque siccome il pc prova non è mio adesso provo a controllare i permessi....

ti allego una printshoot di quello che c'è nel package!

632x321 27Kb


grazie

Joly Profilo | Newbie

comunque i permessi ci sono!

Gluck74 Profilo | Guru

le cose sono due:

o i permessi non sono giusti,
o il programma non cerca il file nel posto giusto (query string sbagliata),

ma è probabile anche tutte e due.
Ricontrolla i permessi e fammi sapere come sono messi.

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Joly Profilo | Newbie

Sui computer su cui faccio le prove entro sempre come amministatore. In Autorizzazione la spunta su Consenti è sempre settata a true.
Fra i vari setup che ho fatto, mi sa che ho fatto un po' di confusione. Forse ma non ne sono sicura ho capito quale sia il problema:
Una volta creato il setup come ho descritto sopra è necessario andare nei prerequisiti (in proprietà del setup) e settare i dowload che deve fare il computer ospite collegandosi ad internet affinchè il mio software possa funzionare. Allego un printshoot.

1366x768 56Kb

Nel mio caso dovevo spuntare il download di SQL SERVER EXPRESS 2005. Nelle varie prove che ho fatto ho dimenticato questo "particolare"....adesso finalmente il software s'installa e funziona!
Ti ringrazio comunque per aver speso il tuo tempo nell'aiutarmi.

Adesso avrei da porre una piccola domandina in merito alla stringa di connessione, come mi comporto...essendo un altro argomento...apro un altro thread? Giusto?

Grazie
Iolanda

Gluck74 Profilo | Guru

Ops..... prerequisito importantissimo.....
Non c'era sql nel computer di destinazione!!! E ti credo non funzionava.


Per al query, come preferisci,
l'importante è risolvere.... ;-)



____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Joly Profilo | Newbie

E' il mio primo installer, non sapevo proprio da dove cominciare. Ho cominciato a fare un po' di ricerche su internet, anche sul questo importantissimo forum e diciamo che ero arrivata a buon punto per farlo funzionare ma poi mi sono persa in un bicchiere d'acqua.

In merito alla stringa di connessione:
prima che facevo l'installer la mia stringa di connessione era:
string strconn = "Data Source=.\\SQLEXPRESS;\r\n AttachDbFilename=\r\n C:\\Users\\Iolanda\\Documents\\Visual Studio 2008\\Projects\\SchedaPaziente\\SchedaPaziente\\dbSchedaPaziente.mdf;\r\n Integrated Security=True;\r\n User Instance=True";

Lasciando questo tipo di stringa naturalmente quando andavo a installare questo programmino su un altro pc non mi funzionava! La stringa non era dinamica ma statica relativamente al mio pc! Non sapevo come renderla dinamica, di nuovo con le ricerche su internet e finalmente la mia stringa divenne dinamica:
string strconn = "Data Source=.\\SQLEXPRESS;\r\n AttachDbFilename=\r\n |DataDirectory|\\dbSchedaPaziente.mdf;\r\n Integrated Security=True;\r\n User Instance=True";

Tu mi confermi che questa stringa è quella giusta?

Il mio programmino non è finito, devo aggiungere ancora altre specifiche, allora lasciando la stringa dinamica quando faccio le mie prove su VS 2008 lanciando il programma e salvo nuovi dati, mi succede che nelle tabelle del DB i dati non me li ritrovo e se chiudo e riapro VS 2008 i dati appena inseriti vengono persi!
Questa cosa è normale? O per le mie prove devo ritornare alla stringa di tipo statica? O mi sono persa di nuovo?

Un'altra info: è importante mettere la password al DB?

Grazie
Iolanda

Gluck74 Profilo | Guru

Ciao Iolanda,
la stringa di connessione va bene in entrabme le forme:
AttachDbFileName=c:\dir1\dir2\nomefile.mdf
AttachDBFilename=|DataDirectory|nomefile.mdf

in sostanza il "marcatore" |DataDirectory| è appunto un placeHolder che restituisce la cartella dove è presente il file .exe in esecuzione.
Quindi in questo caso il DB dovrebbe stare nella stessa cartella dell'eseguibile.

Quando sposti in produzione, controlla i percorsi del DB e vedi se è tutto ok.

P.S.:
queste istruzioni dovrebbero risultarti utili:

AppDomain.CurrentDomain.SetData("DataDirectory", thePath );
Per cambiare il valore del PlaceHolder "DataDirectory"
var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"]; var absoluteDataDirectory = Path.GetFullPath(dataDirectory);
Per leggere il valore di DataDirectory




____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Joly Profilo | Newbie

Ciao Gluck74!
Mi scuso per la prolungata assenza ma il mio VS 2008 era scaduto, oggi ho installato VS 2010 (versione trial)...davvero molto accattivante come grafica!
In merito al tuo ultimo suggerimento, ho avuto un po' di difficoltà nel capire dove inserire le linee di codice da te suggerite nell'ultimo post.

Quando faccio l'INSERT o l'UPDATE nel DB ho utilizzato l'AppDomain x cambiare il valore del PlaceHolder in questo modo:

string strconn = "Data Source=.\\SQLEXPRESS;\r\n AttachDbFilename=\r\n |DataDirectory|\\dbSchedaPaziente.mdf;\r\n Integrated Security=True;\r\n User Instance=True";

string thePath = "C:\\Users\\Iolanda\\Documents\\Visual Studio 2010\\Projects\\SchedaPaziente\\SchedaPaziente";
AppDomain.CurrentDomain.SetData("DataDirectory", thePath);

SqlConnection conn = new SqlConnection();
conn.ConnectionString = strconn;

In questo modo tutto ok!

Quando faccio la select dal DB, invece, non utilizzo l'AppDomain, lasciando il codice in questo modo:

string strconn = "Data Source=.\\SQLEXPRESS;\r\n AttachDbFilename=\r\n |DataDirectory|\\dbSchedaPaziente.mdf;\r\n Integrated Security=True;\r\n User Instance=True";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = strconn;

E' giusto così? A me sembrerebbe funzionare.

Però mi chiedo: al momento di creare l'installer, devo cancellare le istruzioni relative all'AppDomain, in modo da rendere il percorso dinamico?

Ora non ho bene capito a cosa servono queste istruzioni da te suggerite:
var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"];
var absoluteDataDirectory = Path.GetFullPath(dataDirectory);
...mi dici per leggere il valore......???????????????????????????????????

Scusami ancora e grazie per l'attenzione.
Iolanda

Gluck74 Profilo | Guru

Ciao,
mi sono spiegato male in effetti, e non si capisce bene.

Quello che volevo ditri è che quando ti sposti in produzione, dovrai comunque riassegnare il valore a "DataDirectory" per collegarti al DB.
Ho pensato dunque di aggiungere un AppSettings nel config dove memorizzare il percorso.

Il software farà quindi sempre la stesse istruzioni:

var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"];
var absoluteDataDirectory = Path.GetFullPath(dataDirectory);
AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory);

quindi assegnerà alla stringa di connessione il percorso che tu metterai nel file di configurazione.

Per quanto riguarda i dati persi nel DB durante le prove.............
è una cosa stranissima, sei sicura che scrivevi e leggevi lo stesso DB? Usi delle transazioni?




____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
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