it-swarm.com.de

Wie lautet die Verbindungszeichenfolge für localdb für Version 11?

Ich versuche, den Code First Walkthrough des Entity Frameworks ( http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first) durchzuführen -walkthrough.aspx ).

Ich habe den neuesten SQL Server Express und wenn ich meine verfügbaren Versionen über die Befehlszeile überprüfe ( sqllocaldb info ): Ich sehe localdbApp1 und v11.0. Wenn ich versuche, die exemplarische Vorgehensweise mit ein paar geringfügigen Änderungen auszuführen, wird ein Fehler angezeigt, dass keine Verbindung hergestellt werden kann.

Meine app.config sieht so aus:

<parameter value="Server=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" />

Ich habe einen einfachen Verbindungstest wie unten geschrieben und der Code gibt denselben SQL-Verbindungsfehler zurück ((Anbieter: Named Pipes Provider, Fehler: 40 - Verbindung zu SQL Server konnte nicht hergestellt werden)).

new System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0; Integrated Security=True; MultipleActiveResultSets=True").Open();

Ich habe versucht, "Data Source=..." Durch "Server=..." Zu ersetzen, aber ohne Erfolg.

Irgendwelche Ideen, wie die Verbindungszeichenfolge lauten sollte?

62
Bill Nielsen

1) Erfordert .NET Framework 4, das auf mindestens 4.0.2 aktualisiert wurde. Wenn Sie 4.0.2 haben, dann sollten Sie haben

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.2

Wenn Sie die neueste Version von VS 2012 installiert haben, haben Sie wahrscheinlich bereits 4.0.2. Einfach erst verifizieren.

2) Als nächstes benötigen Sie eine Instanz von LocalDb. Standardmäßig haben Sie eine Instanz, deren Name ein einzelnes v -Zeichen gefolgt von der Versionsnummer der LocalDB-Version im Format xx.x ist. Beispiel: v11.0 Steht für SQL Server 2012. Automatische Instanzen sind standardmäßig öffentlich. Sie können auch private Instanzen benennen. . Benannte Instanzen bieten Isolation von anderen Instanzen und können die Leistung verbessern, indem sie Ressourcenkonflikte mit anderen Datenbankbenutzern verringern. Sie können den Status von Instanzen mit dem Dienstprogramm SqlLocalDb.exe Überprüfen (über die Befehlszeile ausführen).

3) Als nächstes sollte Ihre Verbindungszeichenfolge so aussehen:

"Server=(localdb)\\v11.0;Integrated Security=true;"

oder

"Data Source=(localdb)\\test;Integrated Security=true;"

aus Ihrem Code . Sie sind beide gleich. Beachten Sie, dass die beiden \\ Erforderlich sind, da \v Und \t Sonderzeichen bedeuten. Beachten Sie auch, dass hinter (localdb)\\ Der Name Ihrer LocalDb-Instanz steht. v11.0 Ist die öffentliche Standardinstanz, test ist etwas, das ich manuell erstellt habe und das privat ist.

  1. Wenn Sie bereits eine Datenbank (.mdf-Datei) haben:

    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
    
  2. Wenn Sie keine SQL Server-Datenbank haben:

    "Server=(localdb)\\v11.0;Integrated Security=true;"
    

Und Sie können Ihre eigene Datenbank programmgesteuert erstellen:

a) zum Speichern am Standardspeicherort mit der Standardeinstellung:

var query = "CREATE DATABASE myDbName;";

b) Speichern an einem bestimmten Ort mit Ihren eigenen benutzerdefinierten Einstellungen:

// your db name
string dbName = "myDbName";

// path to your db files:
// ensure that the directory exists and you have read write permission.
string[] files = { Path.Combine(Application.StartupPath, dbName + ".mdf"), 
                   Path.Combine(Application.StartupPath, dbName + ".ldf") };

// db creation query:
// note that the data file and log file have different logical names
var query = "CREATE DATABASE " + dbName +
    " ON PRIMARY" +
    " (NAME = " + dbName + "_data," +
    " FILENAME = '" + files[0] + "'," +
    " SIZE = 3MB," +
    " MAXSIZE = 10MB," +
    " FILEGROWTH = 10%)" +

    " LOG ON" +
    " (NAME = " + dbName + "_log," +
    " FILENAME = '" + files[1] + "'," +
    " SIZE = 1MB," +
    " MAXSIZE = 5MB," +
    " FILEGROWTH = 10%)" +
    ";";

Und ausführen!

Eine Beispieltabelle kann folgendermaßen in die Datenbank geladen werden:

 @"CREATE TABLE supportContacts 
    (
        id int identity primary key, 
        type varchar(20), 
        details varchar(30)
    );
   INSERT INTO supportContacts
   (type, details)
   VALUES
   ('Email', '[email protected]'),
   ('Twitter', '@sqlfiddle');";

Beachten Sie, dass Sie mit dem Dienstprogramm SqlLocalDb.exe Nicht auf Datenbanken zugreifen können, sondern das Dienstprogramm sqlcmd benötigen, was traurig ist.

BEARBEITEN: Die Position des Semikolons wurde verschoben. Andernfalls würde ein Fehler auftreten, wenn der Code kopiert/eingefügt wurde

95
nawfal

Ich habe das erwähnte .Net 4.0.2-Update installiert, habe jedoch die gleiche Fehlermeldung erhalten:

Beim Herstellen einer Verbindung zu SQL Server ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten

Ich habe die SqlLocalDb über die Konsole wie folgt überprüft:

C:\>sqllocaldb create "Test"
LocalDB instance "Test" created with version 11.0.

C:\>sqllocaldb start "Test"
LocalDB instance "Test" started.

C:\>sqllocaldb info "Test"
Name:               Test
Version:            11.0.2100.60
Shared name:
Owner:              PC\TESTUSER
Auto-create:        No
State:              Running
Last start time:    05.09.2012 21:14:14
Instance pipe name: np:\\.\pipe\LOCALDB#B8A5271F\tsql\query

Dies bedeutet, dass SqlLocalDb installiert ist und ordnungsgemäß ausgeführt wird. Was war der Grund, warum ich mit dieser Verbindungszeichenfolge keine Verbindung zu SqlLocalDB über .NET-Code herstellen konnte: Server=(LocalDB)\v11.0;Integrated Security=true;?

Dann wurde mir klar, dass meine Anwendung für DotNet Framework 3.5 kompiliert wurde, aber SqlLocalDb funktioniert nur für DotNet 4.0.

Nachdem dies behoben wurde, wurde das Problem behoben.

17

Dies ist ein ziemlich alter Thread, aber seit ich meine Visual Studio 2015-Community heute neu installiert habe, dachte ich, ich könnte einige Informationen darüber hinzufügen, was für VS2015 verwendet werden soll oder was im Allgemeinen funktionieren könnte.

Um zu sehen, welche Instanzen standardmäßig installiert wurden, geben Sie sqllocaldb info innerhalb einer Eingabeaufforderung. Auf meinem Computer erhalte ich zwei Instanzen, die erste mit dem Namen MSSQLLocalDB.

C:\>sqllocaldb info
MSSQLLocalDB
ProjectsV13

Sie können auch eine neue Instanz erstellen, indem Sie sqllocaldb create "some_instance_name", aber die Standardeinstellung funktioniert einwandfrei:

// if not using a verbatim string literal, don't forget to escape backslashes
@"Server=(localdb)\MSSQLLocalDB;Integrated Security=true;"
14
Groo

Ich hatte ein bisschen das gleiche Problem. Mir ist aufgefallen, dass ich:

Data Source= (localdb)\v11.0"

Durch einfaches Hinzufügen eines Back-Slash wurde das Problem für mich gelöst:

Data Source= (localdb)\\v11.0"
9
SpiritBH

In SQL Server 2008 R2-Datenbankdateien, mit denen Sie eine Verbindung herstellen können

Server=np:\\.\pipe\YourInstance\tsql\query;InitialCatalog=yourDataBase;Trusted_Connection=True;

nur, aber in SQL Server 2012 können Sie dies verwenden:

Server = (localdb)\v11.0; Integrierte Sicherheit = true; Datenbank = DB1;

und es hing von Ihrem .mdf.ldf Ausführung.

zum Finden von Programmen verwende ich diese Methode, die in diesem post erklärt wurde

3
yeye

Dies ist für andere, die wie ich gekämpft hätten, um dies zum Laufen zu bringen. Ich habe mehr als einen halben Tag für eine scheinbar triviale Sache verschwendet.

Wenn Sie SQL Express 2012 LocalDB von VS2010 verwenden möchten, muss dieser Patch installiert sein http://www.Microsoft.com/en-us/download/details.aspx?id=27756

Genau wie in den obigen Kommentaren erwähnt, hatte auch ich Microsoft .NET Framework Version 4.0.30319 SP1Rel und da überall erwähnt wurde, dass Sie "Framework 4.0.2 oder höher" benötigen, dachte ich, ich kann loslegen ...

Als ich diesen 4.0.2-Patch jedoch explizit heruntergeladen und installiert habe, hat er funktioniert.

1
Arif Eqbal

Sie müssen Dot Net 4.0.2 oder höher wie erwähnt installieren hier .
Die 4.0-Bits verstehen die von LocalDB geforderte Syntax nicht

Siehe diese Frage hier

Sie können das Update herunterladen hier

1
Steve

Ich habe die Verbindungszeichenfolge Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;

und sogar ein . NET 3.5 Programm verbindet sich und führt SQL erfolgreich aus.

Aber viele Leute sagen, dass .NET 4.0.2 oder 4.5 erforderlich ist.

0
linquize