2013-04-10 21 views
13

Se ho la mia stringa di connessione nel web.config come questo (riga aggiunta feed per una migliore leggibilità):mentre stabilisce una connessione a SQL Server

<add 
name="conn" 
connectionString="Data Source=(localdb)\v11.0; Initial 
    Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; 
    AttachDbFilename=D:\Products.mdf" 
providerName="System.Data.SqlClient"/> 

Le opere di collegamento e posso collegare al database nel database explorer.

Quando ho specificare il connectionstring in codice o uso ConfigurationManager per farlo non funziona:

SqlCommand command = new SqlCommand(); 
    command.CommandText = "select ..."; 
    command.CommandType = CommandType.Text; 
    SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+ 
     "Initial Catalog=MyDB; Integrated Security=True; "+ 
     "MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf"); 
    command.Connection = cn; 
    cn.Open(); 
    DataTable dataTable = new DataTable(); 
    SqlDataReader reader; 
    reader = command.ExecuteReader(); 
    dataTable.Load(reader); 
    cn.Close(); 

Ottenere la stringa di connessione dal web.config dà lo stesso errore:

SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings 
["conn"].ConnectionString; 

L'errore che sto ottenendo è "System.ComponentModel.Win32Exception: Il percorso di rete non è stato trovato"

Nella traccia si dice:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)]

Ho bisogno di aiuto per risolvere questo, state cercando di risolvere questo per ore e qualsiasi on line suggerimento è che dovrei controllare le impostazioni di rete (non si applica come è la connessione a un'istanza locale di Express Server SQL). Il nome del server (la stessa stringa funziona in VS Express ma non nel codice in esecuzione).

Potrebbe essere un problema di autenticazione? E se è così allora perché l'errore non informativo?

Grazie per aver letto il mio post e spero che tu possa aiutarmi con questo.

Aggiornamento:

ho provato le seguenti cose:

Dato il gruppo Everyone permesso completo sul mdf e ldf

In proprietà del progetto sotto web che ho provato in esecuzione il progetto sotto server di sviluppo VS e server Web IIS locale (è IIS Express)

Non c'è fortuna, non è ancora possibile connettersi dove si collega perfettamente bene quando si copia il codice in un progetto che è stato creato con "ASP.NET vuota Web Applica "

+0

qual è la versione di sql server ??? –

+0

La mia ipotesi è il server SQL Express 11 (v11.0 nella stringa di connessione) in file di programma ho una cartella del server SQL con sottocartelle chiamate da 8 a 11 (di serie VS 2013 Express Install) – HMR

risposta

8

Il problema era legato a l'applicazione non è in esecuzione nella versione di .NET 4.0

Secondo la seguente pagina: http://www.connectionstrings.com/sql-server-2012#sqlconnection

È necessario .NET 4.0 e per l'utilizzo di named pipe :

The Server=(localdb) syntax is not supported by .NET framework versions before 4.0.2. However the named pipes connection will work to connect pre 4.0.2 applications to LocalDB instances.

SqlLocalDB.exe create MyInstance 
SqlLocalDB.exe start MyInstance 
SqlLocalDB.exe info MyInstance 

Le informazioni fornisce la named pipe, allora questo può essere utilizzato nella stringa di connessione:

<add name="conn" 
providerName="System.Data.SqlClient" 
connectionString="Server=np:\\.\pipe\LOCALDB#B1704E69\tsql\query"/> 
+0

Ho un problema simile (ho errore 26 invece di 40), ma ho .NET. framework 4.5 installato. Non riesco ad accedere (localdb) \ v.110, ma posso accedere al db tramite la named pipe. Cosa potevo fare? – csima

+1

@csima La connessione funziona quando si tenta di visualizzare le tabelle nel database explorer di Visula studio (express). VS usa la connessione web.config per connettersi, quindi se funziona, ma non nella tua applicazione, controlla la risposta di Damith e assicurati di eseguire l'applicazione con il runtime .net 4, in modo che possa essere eseguito con una versione precedente. – HMR

+0

Sì, funziona in Visual Studio. Il mio [problema] (http://stackoverflow.com/questions/16625151/azure-storage-emulator-cannot-connect-to-localdb) era legato al fatto che l'emulatore di Azure non poteva connettersi, e lo stesso è accaduto quando Ho provato a stabilire una connessione ODBC (anche se le pipe denominate funzionavano). Ho scelto di passare a SQLEXPRESS. Grazie per la risposta! – csima

13

Hai correttamente eseguito l'escape del nome file db ma non dell'origine dati, quindi tenta di connettersi a un'origine dati denominata" (localdb) 11.0 ", che (molto probabilmente) non esiste.

Prova la fuga in modo corretto in questo modo:

SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+ 
"Initial Catalog=MyDB; Integrated Security=True; "+ 
"MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf"); 
+0

Grazie, che ha fatto fare il codice lavorare in un altro progetto. La cosa su cui sto lavorando non ha un file di progetto, quindi ho usato file => apri sito web. Il codice che funziona in un nuovo progetto di moduli Web non si trova in un progetto di "sito Web aperto" (codice di lavoro copiato e incollato). – HMR

+0

Questo problema esiste ancora. Quando si utilizza un progetto "open web site" e si aggiunge una connessione dati per testare "sql server express" usando la stringa di connessione menzionata sopra o recuperandola dalla configurazione web, ottengo l'errore prima citato. Quando si utilizza la stessa stringa di connessione esatta, funziona quando si crea un progetto con "asp.net web application" o "asp.net web form appliction" – HMR

+1

In base ai dettagli dell'eccezione, si utilizza il protocollo named pipe; potresti passare a TCP/IP e vedere se aiuta? Vedi http://weblogs.asp.net/jgalloway/archive/2007/02/24/sql-force-the-protocol-tcp-named-pipes-etc-in-your-connection-string.aspx anche tu, hai provare a connettersi a un'istanza di SQL Server diversa? –

1

Solo per ridacchia invece di mettere (LocalDB) ha messo un periodo '.'. In modo che assomigli a

Data Source=.\v11.0; 

Sarei sorpreso se funziona, ma è possibile farlo in SQL completo.

+0

Grazie Jeff, l'ho provato ma lo stesso errore – HMR

1

poiché si tratta di un progetto di sito Web, è necessario specificare la versione del framework .net corretta da compilare. SqlLocalDb necessita di .net framework 4.

se si crea un progetto Web e si aggiungono file di sorgenti del sito Web, funzionerà se il framework .net è 4+.Quando si apre il framework di destinazione predefinito del sito Web o il framework dll esistente potrebbe non essere lo stesso e potrebbe essere .net 3.5, ecco perché si ottiene questo errore. spero che questo ti aiuti.

enter image description here

+0

Ho dovuto cambiare il framework di destinazione a 3.5, quindi ho provato una stringa di connessione come "Data Source =. \ SQLEXPRESS ; AttachDbFilename = D: \ Products.mdf; Integrated Security = True ;; Connect Timeout = 30; User Instance = True "nel web.config ma lo stesso errore. – HMR

+0

Avevi ragione sul bisogno .net 4.0 per una stringa di connessione che usa (localDb) .Dal momento che il progetto non può essere costruito affatto usando .net 4.0 e il server usa .net 2.0 Ho usato named pipe per connetterti a localdb. – HMR

3

Invece di utilizzare (LocalDB), Hai provato a usare '\ SQLExpress;.' per questa pagina su MSDN? Usa l'istanza predefinita, che potrebbe non essere quella che ti serve.

sarebbe leggere in questo modo:

<add 
name="conn" 
connectionString="Provider=SqlClient;Data Source=.\\SQLExpress; Initial 
    Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; 
    AttachDbFilename=D:\Products.mdf" 
providerName="System.Data.SqlClient"/> 
+0

Grazie, Daniele, l'ho provato ma lo stesso errore e smesso di funzionare nel database VS espl orer. Il fatto che funzioni nell'esploratore di database VS e che il connectiontring sia preso dalla configurazione web mi dice che la stringa di connessione dovrebbe essere corretta ma forse non funziona con .net 3.5 o VS non avvia alcun servizio quando è un progetto del sito web o ... – HMR

+0

Daniele, sei arrivato vicino alla risposta giusta. Il problema è che un'installazione standard di VS 2013 non installa SQL Server Express ma solo SQL Express locale. Quando si utilizza sqlExpress nella stringa di connessione, chiudendo e aprendo VS si lamenta che non esiste un server SQL Express. Ho pensato che localdb fosse una funzionalità di SQL Server Express e forse ho sbagliato e VS mi ha appena dato questo avvertimento per confondermi ancora di più. – HMR

+0

HMR, vedo, ha senso. Grazie per le informazioni aggiuntive. Sembra che ci sia qualcos'altro che sta succedendo qui. –

1

Verificare la versione del riferimento System.Data tra il progetto vuoto che funziona, e il progetto che non funziona. È possibile utilizzare Solution Explorer per verificarlo. Entrambi i progetti utilizzano la stessa versione?

enter image description here

+0

Grazie; entrambi i progetti fanno riferimento alla stessa dll: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll – HMR

0

anche ... questo potrebbe essere correlato alla configurazione in IIS.

del tuo sito web (Stato sessione) potrebbe essere impostato per utilizzare SQL Server per la sessione. Controlla anche lì ... Ho appena avuto questo problema, e ho realizzato la nostra connessione sqlbox modificata e ho dimenticato di aggiornare su IIS.

+0

Questo dovrebbe essere un commento (una volta che hai [sufficiente reputazione] (http://stackoverflow.com/help/privileges) per aggiungerne uno) invece di una risposta. Fare riferimento alla [Guida in linea] (http://stackoverflow.com/help/whats-reputation) per imparare come guadagnare reputazione e quindi essere in grado di commentare. – mathielo

0

Questo errore si presentava dopo aver compresso la directory C: \ Programmi \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA. La decompressione ha corretto l'errore.

Problemi correlati