it-swarm.com.de

beim Herstellen einer Verbindung zu SQL Server ist ein Fehler aufgetreten

Wenn ich meine Verbindungszeichenfolge in der web.config wie folgt habe (Zeilenvorschub für bessere Lesbarkeit hinzugefügt):

<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"/>

Die Verbindung funktioniert und ich kann im Datenbank-Explorer eine Verbindung zur Datenbank herstellen.

Wenn ich die Verbindungszeichenfolge in Code eingebe oder ConfigurationManager verwende, um es zu erhalten, funktioniert es nicht:

    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();

Beim Abrufen der Verbindungszeichenfolge aus der Datei web.config wird derselbe Fehler angezeigt:

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

Der Fehler, den ich erhalte, ist "System.ComponentModel.Win32Exception: Der Netzwerkpfad wurde nicht gefunden"

In der Spur heißt es:

Ein netzwerkbezogener oder instanzspezifischer Fehler ist aufgetreten, während Herstellen einer Verbindung zu SQL Server. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server ist so konfiguriert, dass Remoteverbindungen zugelassen werden. (provider: Named Pipes Provider, Fehler: 40 - Verbindung zu SQL Server konnte nicht hergestellt werden.)]

Ich brauche etwas Hilfe, um dieses Problem zu lösen. Ich habe versucht, das Problem stundenlang zu lösen, und jeder Online-Vorschlag ist, dass ich die Netzwerkeinstellungen überprüfen sollte (gilt nicht, da die Verbindung zur lokalen Instanz von SQL Server Express hergestellt wird). Der Servername (dieselbe Zeichenfolge funktioniert in VS Express, jedoch nicht in laufendem Code).

Könnte es ein Authentifizierungsproblem sein? Und wenn ja, warum dann der un informative Fehler?

Vielen Dank, dass Sie meinen Beitrag gelesen haben und hoffen, dass Sie mir dabei helfen können.

Aktualisieren:

Ich habe folgende Dinge ausprobiert:

Wenn die Gruppe alle Benutzer der MDF- und LDF-Dateien uneingeschränkt berechtigt ist

In den Projekteigenschaften unter Web habe ich versucht, das Projekt unter dem VS-Entwicklungsserver und dem lokalen IIS - Webserver auszuführen (dh IIS Express).

Kein Glück, es kann immer noch keine Verbindung hergestellt werden, wenn eine einwandfreie Verbindung hergestellt wird, wenn der Code in ein Projekt kopiert wird, das mit "ASP.NET empty Web Application" erstellt wurde.

13
HMR

Das Problem war auf die Anwendung zurückzuführen, die nicht in .net Version 4.0 ausgeführt wurde

Entsprechend der folgenden Seite: http://www.connectionstrings.com/sql-server-2012#sqlconnection

Sie benötigen .net 4.0 und höher, um Named Pipes verwenden zu können:

Die Server = (localdb) -Syntax wird von .NET Framework .__ nicht unterstützt. Versionen vor 4.0.2. Die Named Pipes-Verbindung funktioniert jedoch mit Verbinden Sie Anwendungen vor 4.0.2 mit LocalDB-Instanzen.

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

Die Info liefert die Named Pipe, diese kann dann in der Verbindungszeichenfolge verwendet werden:

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

Sie haben den DB-Dateinamen, aber nicht die Datenquelle ordnungsgemäß umgangen. Es wird daher versucht, eine Verbindung zu einer Datenquelle namens "(localdb) 11.0" herzustellen, die (höchstwahrscheinlich nicht vorhanden) ist.

Versuchen Sie es so richtig zu umgehen:

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

Haben Sie anstelle von (localdb) versucht, '.\SQLExpress;' zu verwenden? pro Seite auf MSDN ? Es verwendet die Standardinstanz, die Sie möglicherweise nicht benötigen.

es würde so lesen:

<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"/>
3
Danielle Stone

Überprüfen Sie die Version des Verweises System.Data zwischen dem leeren Projekt, das funktioniert, und Ihrem Projekt, das nicht funktioniert. Sie können dies mit dem Lösungs-Explorer überprüfen. Verwenden beide Projekte dieselbe Version?

enter image description here

1
Rots

da dies ein Website-Projekt ist, müssen Sie die richtige .net-Framework-Version angeben, die erstellt werden soll. SqlLocalDb benötigt das .net Framework 4. 

wenn Sie ein Webprojekt erstellen und Website-Quelldateien hinzufügen, funktioniert es, wenn das .NET-Framework mehr als 4 ist. Wenn Sie das Standard-Zielframework für Websites öffnen oder das vorhandene DLL-Framework möglicherweise nicht dasselbe ist. hoffe das hilft. 

enter image description here

1
Damith

Nur für das Kichern statt setzen (localdb) einen Punkt '.'. So dass es aussehen würde

Data Source=.\v11.0;

Ich wäre überrascht, wenn es funktioniert, aber Sie können das in voller SQL tun.

1
Jeff B

Dieser Fehler wurde angezeigt, nachdem ich das Verzeichnis C:\Programme\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA komprimiert habe. Durch das Dekomprimieren wurde der Fehler behoben.

0
Andrew Keeton

Außerdem ... könnte dies mit Ihrer Einrichtung in IIS zusammenhängen.

Der Sitzungsstatus Ihrer Website kann so eingerichtet werden, dass SQL Server für Ihre Sitzung verwendet wird. Überprüfen Sie auch dort ... Ich hatte gerade dieses Problem und erkannte, dass sich unsere SQL Server-Verbindung geändert hat, und vergaß ein Update auf IIS.

0
Cowboys