Frage

Ich habe ein alten .net 1.0 Webapp, die ein wenig Wartung ihm getan werden muss. Ich habe den Auto-Veredler verwendet, um es ein Upgrade 3.5 auf .NET (und auch später versucht, 2.0), aber jetzt kann es nicht mit der Datenbank verbinden.

Auf der Oberfläche sieht es wie ein Noob-Verbindung-string Problem, aber ich denke, es ist eher zu einem gewissen subtilen Problem aus dem Upgrade zusammenhang.


Ich erhalte die generische Fehlermeldung:

Ein Fehler ist aufgetreten, während eine Verbindung mit dem Server aufzubauen. Wenn zu SQL Server 2005 verbindet, kann dieser Fehler dadurch verursacht werden, dass Server unter den Standardeinstellungen von SQL erlaubt keine Remote-Verbindungen. (Anbieter: Named Pipes-Anbieter, Fehler: 40 - konnte keine Verbindung zum SQL Server öffnen)


Der Quellcode ist ziemlich einfach, ohne Schnickschnack:

protected static SqlConnection objConn;

objConn = new SqlConnection(strConnectionString);

try
{
    objConn.Open();
}

und auch versucht, es so:

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

Die Verbindungszeichenfolge stammt aus der web.config, und mit dem Debugger einen Haltepunkt zu setzen und die Eigenschaften der Verbindung durch, bevor er versucht, sie zu öffnen, kann ich sehen, dass seine die Verbindungszeichenfolge richtig gefunden:

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


Eine Handvoll Dinge, die ich glaube, ich habe ausgeschlossen:

Die Fehlermeldung ist das gleiche, ob auf SQL Server 2005 oder SQL Server 2000 verbinden.

Keine Fehler oder Warnungen in der VS Fehlerliste.

Die Verbindungszeichenfolge ist das gleiche wie ein paar anderer Websites, die auch die gleiche Datenbank verwenden, damit ich weiß, dass die Verbindungszeichenfolge korrekt ist.

Ich habe versucht, es von meinem lokalen Computer anschließen zu müssen und von dem normalen Webserver (wo ich auf die Datenbanken über SQL Query Analyzer eine Verbindung herstellen kann), so ist es nicht ein Firewall-Problem, weder ist es eine max-connections Ausgabe.

Es ist auf die Server-IP-Adresse verbinden, so dass sie nicht ein Computer-Browser-Problem (und andere Webapps können feine verbinden.

TCP und Named Pipes sind die 2-Netzwerkprotokolle auf dem SQL-Server aktiviert ist.

Hinzufügen "Network Library = DBMSSOCN;" um die Verbindungszeichenfolge, die Fehlermeldung ändert sich um „Anbieter: TCP-Provider, error“ (in der Verbindungszeichenfolge gab es etwas, das ich neulich geändert, die hatte, dass auch beeinflussen, aber ich kann, was jetzt nicht mehr.)


ich bereits durch 3 andere ähnliche Beiträge auf Stack-Überlauf haben gesucht:
(Kann nicht Links Liste, weil ich bin ein neuer Benutzer, aber ihre Frage-IDs, wenn jemand anderes will sie in einem Kommentar verbinden ist: 63875, 1038888, 846479)
Und dieser Artikel auf einer anderen Website hatte einige gute Ideen der Dinge auszuprobieren, die nicht helfen, entweder:
http://weblogs.sqlteam.com/tarad/archive/ 2008/05/23 / 60609.aspx


Meine beste Vermutung ist, dass seine etwas durch das Upgrade zwischen .net Versionen verursacht - vielleicht etwas falsch in der web.config

?

Es ist eine C # app, ziemlich klein / einfach, aber hat sich in drei Projekte aufgeteilt.

War es hilfreich?

Lösung

eine Konsolenanwendung schreiben, die nichts tut, sondern versuchen, auf die Datenbank zu verbinden mit dem Code Sie auf dem Laufenden. Hard-Code der Verbindungszeichenfolge in dem Konsolenprogramm.

Mit anderen Worten, entfernen Sie alle Ablenkungen, um sicherzustellen, dass der Kern-Code Sie versuchen, tatsächlich zu laufen korrekt funktioniert.

Andere Tipps

Wie es gab nie eine tatsächliche Lösung für dieses Problem zur Verfügung gestellt, hier ist derjenige, der mir geholfen hat:

Ich hatte genau das gleiche Problem, wenn ich eine perfekt mit ASP.NET 2.0-Anwendung auf .NET 3.5 aufgerüstet. Der Web-App wird von IIS 5.1 unter Windows XP gehostet und ich bin mit SQL Server Express 2005. Ich bin die folgende Verbindungszeichenfolge in meinem web.config mit:

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

So wie Sie sehen, ich mache keine TCP-Verbindung hier oder auf einen Remote-Server zu verbinden. Ich verbinde nur die SQLEXPRESS Instanz auf dem lokalen Host durch Named Pipes. Deshalb dachte ich, wird es absolut nichts mit ermöglicht Remote-Verbindungen auf SQL Server zu tun 2005. Aber als ich herausgefunden habe, tut es! (Ich weiß nicht, den eigentlichen Grund für diesen!) Habe ich ein paar Stunden damit verbracht, um das herauszufinden, vielleicht hilft das jemand ...

Was Sie tun müssen (bitte google für die Details):

  1. Zulassen von lokalen und Remote-Verbindungen über SQL Server 2005-Oberflächenkonfigurationstool (Ich wählen Sie die Option "Mit beiden TCP / IP und Named Pipes")
  2. Aktivieren Sie den SQL Server-Browser-Dienst
  3. Stellen Sie den Abhör TCP-Port 1433 für alle IP-Adressen über SQL Server Configuration Manager Tool
  4. Genießen Sie Ihren laufenden Web-App: -)

Warum all dies ist notwendig, um von einer .NET 3.5 Web App zu SQL Server erfolgreich zu verbinden, wenn es funktioniert bereits von .NET 2.0 ist mir schleierhaft!

Nach diese , SQL 2005 kommt nicht darauf konfiguriert, eingehende lokalen oder Remote-Verbindungen zu ermöglichen, und Sie haben es zu ermöglichen, sich selbst.

Ich bin sicher, dass Sie durch diese Schritte schon gegangen sind, aber ... versuchen Remote-Verbindung für SQL Server ermöglicht und ermöglicht den SQL Server-Browser-Dienst. Eine Anleitung für beide können hier .

Sie könnten versuchen, eine andere Art von Verbindungszeichenfolge. Meine Verbindungszeichenfolgen werden in der Regel formatiert wie:

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

Sind die andere aplication Sie, daß die arbeiten auch .NET 3.5-Anwendungen?


Ich bin auch gespannt, wie Sie dieses Stück Code bekommen verwaltet Arbeits

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

Ich denke du meinst

using (objConn = new SqlConnection(strConnectionString)) 

oder?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top