5

Ho un SQL Server Express 2008 installato su una delle mie macchine e sto tentando di stabilire una connessione remota ... quando utilizzo MS SQL Server Management Studio posso accedere al database senza problemi a tutti (con le stesse credenziali), ma quando cerco di creare una stringa di connessione nella mia applicazione C# ottengo un'eccezione:C# 2008 Stringa di connessione SQL Server Express

Si è verificato un errore specifico di istanza relativo alla rete o mentre stabilisce una connessione a SQL Server. Il server non è stato trovato o non era accessibile. Verificare che il nome dell'istanza sia corretto e che SQL Server sia configurato per consentire connessioni remote .

Ecco ciò che la mia stringa di connessione sembra (l'informazione privata è cambiata):

"Data Source="MACHINENAME\\SQLEXPRESS";User ID="Admin";Password="the_password";Initial Catalog="MyDatabase";Integrated Security=True;Connect Timeout=120"); 

Come ho detto, posso entrare utilizzando il Management Studio con le stesse impostazioni: stesso utente id , password e nome dell'origine dati, ma non riesce quando tento di aprire una connessione con la stringa di connessione sopra.

Nota:

  1. Ho attivato la connettività remota sul server, disabilitato il Firewall connessione, TCP abilitato/IP al server, acceso il Browser SQL.

  2. La stringa di connessione funziona correttamente quando sono sulla stessa macchina.

  3. Ho cercato l'opzione di sicurezza integrata e l'ho impostato su falso solo per assicurarsi che non stia tentando di utilizzare l'accesso di Windows, ma non riesce ancora.

  4. Il database è configurato per consentire l'accesso a Windows e l'accesso al database.

  5. Cambiando l'opzione di sicurezza integrata su SSPI, True e infine False, tutti e 3 mi hanno dato lo stesso errore di sopra.

Qualcuno può dirmi se sto facendo qualcosa di sbagliato?

UPDATE, ecco il mio codice esatto (questa volta solo la password viene rimossa, e ho aggiunto una foto di studio di gestione in esecuzione sulla stessa macchina):

string _connectionString = 
      //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Connect Timeout=120", // Same problem 
      //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Integrated Security=False;Connect Timeout=120", // Same problem 
      string.Format("Data Source=%s;User ID=%s;Password=%s;Initial Catalog=%s;Integrated Security=False;Connect Timeout=120", // Same problem 
      "GANTCHEVI\\SQLEXPRESS", 
      "FinchAdmin", 
      "the_password", 
      "Finch"); 

Connected Via Management Studio: See Picture http://s113.photobucket.com/albums/n202/ozpowermo/?action=view&current=ManagementStudio.jpg

http://s113.photobucket.com/albums/n202/ozpowermo/?action=view&current=ManagementStudio.jpg

ho capito:

Quando si utilizza ° L'etichetta "Data Source =" dovrebbe usare "User Id", se usi User ID non sembra che funzioni!

string _connectionString = "Data Source=GANTCHEVI\\SQLEXPRESS;Initial Catalog=Finch;Integrated Security=False;User Id=FinchAdmin;Password=the_password;Connect Timeout=0";" 

risposta

11

Remove Integrated Security = True dalla stringa di connessione e (facoltativo) aggiungere Persist Security Info = True;

Da MSDN:

Integrated Security - Quando falsa, ID utente e la password sono specificati nella connessione. Quando è true, le credenziali dell'account Windows corrente vengono utilizzate per l'autenticazione.

+0

+1 bella spiegazione. – Praveen

0

Cosa succede se si utilizza Integrated Security = SSPI?

Se non si desidera utilizzare un accesso di Windows, credo che l'altra risposta sulla rimozione del parametro di sicurezza integrata sia corretta.

1

Ok - Sto indovinando hai provato tutti questi http://blogs.msdn.com/sqlexpress/archive/2005/05/05/415084.aspx

Hai provato SQLPing su MACHINENAME \ SQLEXPRESS

Riesci a ping MACHINENAME

Infine, sono abbastanza sicuro che solo bisogno di 1 barra, ad es. MACHINENAME \ SQLEXPRESS

+0

Grazie per aver risposto :) Sì, ho già attivato tutte queste impostazioni e posso collegarmi al DB utilizzando Management Studio, in questo momento sono effettivamente connesso a Management Studio. Posso eseguire il ping di MACHINENAME e restituisce 192.168.0.9 (l'indirizzo della macchina collegata al mio router). Si tratta di due barre quando si trova all'interno di una stringa poiché la barra è considerata un carattere speciale. – Kiril

+0

Sì completamente corretto su due barre, pensavo che fosse nella configurazione. Doh! –

1

Potrebbe essere che l'istanza SQL non sia configurata per accettare connessioni TCP in entrata, è possibile controllare questa sotto Sta rt-> SQL Server 2008 -> Strumenti di congurazione -> Gestione configurazione SQL Server. Sul lato sinistro in quello strumento vedrai la configurazione di rete, espanderla per vedere quali protocolli sono abilitati.

+0

È configurato per accettare connessioni TCP. Possiedo Management Studio sulla stessa macchina dell'applicazione C# e sono connesso al DB con le stesse impostazioni. – Kiril

+1

Volevo avere Integrated Security sul mio server locale db in modo da poter utilizzare le mie attuali credenziali dell'account Windows. Questa risposta mi ha portato ad aprire gli strumenti di configurazione. Quando ho avviato SQL Server Agent, potevo connettermi dalla mia app C# a un database. Grazie Colin. – DavidHyogo

2

provare questo

string sqlcon=("Data Source="your pc name\\SQLEXPRESS"; 
UserID=sa; 
Password=****; 
Initial Catalog="+MyDatabase+"; 
IntegratedSecurity=True;");