Domanda

Ho un vecchio .net 1.0 webapp che ha bisogno di un po 'di manutenzione fatto su di esso. Ho usato l'auto-Upgrader per aggiornarlo a .NET 3.5 (e anche in seguito provato 2.0), ma ora non riesce a connettersi al database.

In superficie questo sembra un problema di connessione niubbo-string, ma sto pensando è più probabile essere collegato con qualche problema sottile dal aggiornamento.


ottengo il messaggio di errore generico:

Un errore si è verificato mentre stabilisce una connessione al server. Durante la connessione a SQL Server 2005, questo errore può essere causato dal fatto che sotto l'impostazioni predefinite di SQL Server non consente le connessioni remote. (Fornitore: Canali denominati fornitore, errore: 40 - Impossibile aprire una connessione a SQL Server)


il codice sorgente è piuttosto semplice, senza campane o fischi:

protected static SqlConnection objConn;

objConn = new SqlConnection(strConnectionString);

try
{
    objConn.Open();
}

e anche provato come:

using (objConn = new SqlConnection(strConnectionString))
{
    objConn.Open();
    ...
}

La stringa di connessione viene dal web.config, e utilizzando il debugger per impostare un punto di interruzione e guardare attraverso le proprietà della connessione prima che tenta di aprirlo, posso vedere che la sua trovata la stringa di connessione corretta:

connectionString = "Data Source = XXX.XXX.XXX.XXX; Initial Catalog = XXXXXX; User ID = XXXXXX; Password = XXXXXX"


Una manciata di cose che credo di aver escluso:

Il messaggio di errore è lo stesso se si connette a SQL Server 2005 o SQL Server 2000.

Non ci sono errori o avvisi nella lista degli errori VS.

La stringa di connessione è la stessa di un paio di altri siti web che utilizzano anche lo stesso database, quindi so che la stringa di connessione sia corretta.

Ho provato averlo connettersi dal mio computer locale (dove posso connettersi ai database tramite SQL Query Analyzer) e dal server web normale, quindi non è un problema di firewall, non è neppure un problema di max-connections.

E 'la connessione all'indirizzo IP del server, quindi non è un problema di browser del computer (e altre applicazioni web in grado di connettersi bene.

TCP e named pipe sono i protocolli di rete 2 abilitati sul server SQL.

L'aggiunta di "Network Library = DBMSSOCN;" alla stringa di connessione cambia il messaggio di errore per includere "provider: provider TCP, errore" (c'era qualcos'altro ho cambiato nella stringa di connessione, l'altro giorno che aveva anche che influenzano, ma non riesco a ricordare quello che ora.)


Ho già guardato attraverso altri 3 messaggi simili su stack overflow:
(Non è possibile elencare i link qui perché io sono un nuovo utente, ma le loro domande d'identità di se qualcun altro vuole collegare a loro in un commento sono: 63875, 1.038.888, 846.479)
E questo articolo su un altro sito ha avuto alcune buone idee di cose da provare che non aiutano:
http://weblogs.sqlteam.com/tarad/archive/ 2008/05/23 / 60609.aspx


La mia ipotesi migliore è che la sua qualcosa causato da l'aggiornamento tra le versioni .net - forse qualcosa di sbagliato nel web.config

?

Si tratta di un'applicazione C #, piuttosto piccolo / di base, ma è stato suddiviso in tre progetti.

È stato utile?

Soluzione

Scrivi un'applicazione console che non fa altro che cercare di connettersi al database utilizzando il codice che avete inviato. Hard-code la stringa di connessione nel programma di console.

In altre parole, rimuovere tutte le distrazioni per assicurarsi che il codice di base che si sta tentando di eseguire effettivamente funziona correttamente.

Altri suggerimenti

Per quanto non c'è mai stata una soluzione reale previsto per questo problema, qui è quello che mi ha aiutato:

Ho avuto lo stesso problema quando ho aggiornato un'applicazione perfettamente in esecuzione ASP.NET 2.0 per .NET 3.5. L'applicazione web è ospitato da IIS 5.1 su Windows XP e sto usando SQL Server Express 2005. Sto utilizzando la seguente stringa di connessione nel mio web.config:

<add name="myDbConnection" providerName="System.Data.SqlClient" connectionString="Data Source=http://localhost;Server=.\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True"/>

Quindi, come vedete, sto facendo alcuna connessione tcp qui o la connessione a un server remoto. Sto solo collegando l'istanza SQLEXPRESS sul localhost attraverso named pipe. Ecco perché ho pensato, non avrà assolutamente nulla a che fare con permettere le connessioni remote su SQL Server 2005. Ma, come ho scoperto, lo fa! (Non so il motivo reale per questo!) Ho trascorso un paio d'ore per scoprire che fuori, quindi forse questo aiuta qualcuno ...

Quello che devi fare (si prega di utilizzare google per i dettagli):

  1. Consentire le connessioni locali e remoti tramite SQL Server 2005 Surface Area Configuration Tool (Scelgo l'opzione "Usa sia TCP / IP e named pipe")
  2. Attivare il servizio SQL Server Browser
  3. Imposta la porta di ascolto TCP 1433 per tutti gli IP tramite lo strumento di SQL Server Configuration Manager
  4. Godetevi il vostro web app in esecuzione: -)

Perché tutto ciò è necessario per collegare con successo da un .NET 3.5 Web App per SQL Server quando funziona già da NET 2.0 è oltre me!

Secondo questo , SQL 2005 non venire configurato per consentire le connessioni locali o remote in entrata e bisogna attivare da soli.

Sono sicuro che sono passati attraverso questi passaggi già ma ... provare ad abilitare la connessione remota per SQL Server e abilitare il servizio SQL Server Browser. Una guida per entrambi può essere trovato qui .

Si potrebbe provare a utilizzare un altro tipo di stringa di connessione. Le mie stringhe di connessione sono di solito formattati come:

<add name="DataFrom" connectionString="SERVER=[servername];Database=[dbname];UID=[userid];PWD=[password];"/>

sono gli altri aplication lei ha detto che sta lavorando anche .NET 3.5 le applicazioni?


Sono curioso anche come sei riuscito a ottenere questo pezzo di codice di lavoro

using (var = new SqlConnection(strConnectionString))
{
    objConn.Open();
    ...
}

Credo che si intende

using (objConn = new SqlConnection(strConnectionString)) 

giusto?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top