2012-05-10 10 views
54

Próbuję wykonać pierwszy kodowy przewodnik po strukturze encji (http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx).Jaki jest ciąg połączenia dla localdb dla wersji 11

Mam najnowszy SQL Server Express i kiedy sprawdzam moje wersje dostępne za pośrednictwem wiersza polecenia (sqllocaldb info): Widzę localdbApp1 i v11.0. Kiedy próbuję uruchomić instrukcję z kilkoma drobnymi poprawkami, dostaję błąd braku połączenia.

Moje app.config wygląda następująco:

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

Napisałem prosty test połączenia jak poniżej i kod powraca ten sam błąd połączenia SQL ((dostawca: Named Pipes Provider, błąd: 40 - nie można otwórz połączenie z SQL Server)).

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

Próbowałem zastępując "Data Source=..." z "Server=..." ale tam bezskutecznie.

Jakieś pomysły, co powinien być ciąg połączenia?

+6

Nie mówię, to jest przyczyną problemu, ponieważ może być ich więcej, ale odwrotne ukośniki są specjalne w łańcuchach C#, chyba że poprzedzisz je przez '@': '@" (LocalDB) \ v11.0 "'. – hvd

+1

Prawda Nie dodałem symbolu @. Ponowiłem próbę i zwróciłem ten sam wynik. –

+0

Nie ma bazy danych w łańcuchu połączenia. –

Odpowiedz

1

Musisz zainstalować Dot Net 4.0.2 lub nowszy, jak wspomniano here.
Bity 4,0 nie rozumiem składni wymaganej przez LocalDB

See this question here

Można ściągnięcie aktualizacji here

+0

Ja już pobrać najnowszy. Oto, co pokazuje moja Pomoc-> O ...: Microsoft Visual Studio 2010 Wersja 10.0.40219.1 SP1Rel Microsoft .NET Framework Wersja 4.0.30319 SP1Rel –

+0

Prawdopodobnie masz najnowszą wersję. Jak moje. Sprawdzono na Presentation.Core.dll z wersją 4.0.30319.275 (w porównaniu do 245 w artykule aktualizacyjnym microsoft) – Steve

1

To jest dla innych, którzy zmagali się jak mi się uzyskać tej pracy ... .I zmarnowane więcej niż pół dnia na pozornie błahej rzeczy ...

Jeśli chcesz korzystać z SQL Express 2012 LocalDB z VS2010 musi mieć ta poprawka zainstalowana http://www.microsoft.com/en-us/download/details.aspx?id=27756

Tak jak wspomniałem w komentarzach powyżej, również miałem Microsoft .NET Framework w wersji 4.0.30319 SP1Rel i od kiedy wspomniano wszędzie, że potrzebujesz "Framework 4.0.2 lub Above" Myślałem, że jestem dobry, aby przejść ...

kiedy jednak wyraźnie, że pobrane i zainstalowane Patch 4.0.2 to mam to działa ....

17

po zainstalowaniu wymienionego .Net 4.0.2 aktualizacji, ale mam ten sam komunikat o błędzie:

A network-related or instance-specific error occurred while establishing a connection to SQL Server

Sprawdziłem SqlLocalDb za pośrednictwem konsoli w następujący sposób:

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 

Oznacza to, że SqlLocalDb jest zainstalowany i działa poprawnie. Jaki był więc powód, dla którego nie mogłem połączyć się z SqlLocalDB przez kod .Net z tym łańcuchem połączeń: Server=(LocalDB)\v11.0;Integrated Security=true;?

Następnie zdałem sobie sprawę, że moja aplikacja została skompilowana dla systemu DotNet 3.5, ale SqlLocalDb działa tylko w DotNet 4.0.

Po rozwiązaniu tego problemu problem został rozwiązany.

90

1) Wymaga .NET Framework 4 zaktualizowany do co najmniej 4.0.2.If you have 4.0.2, then you should have

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

Jeśli masz zainstalowaną najnowszą VS 2012 są szanse, że masz już 4.0.2. Najpierw sprawdź.

2) Następnie musisz mieć instancję LocalDb. Domyślnie masz instancję, której nazwa to pojedynczy znak v, po którym następuje numer wersji wersji LocalDB w formacie xx.x. Na przykład v11.0 reprezentuje program SQL Server 2012. Automatic instances are public by default. You can also have named instances which are private. Wywołane instancje zapewniają izolację od innych instancji i mogą poprawić wydajność, zmniejszając rywalizację o zasoby z innymi użytkownikami baz danych. You can check the status of instances using the SqlLocalDb.exe utility (run it from command line).

3) Następnie ciąg połączenia powinna wyglądać następująco:

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

lub

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

z kodu. They both are the same. Należy zwrócić uwagę na dwa wymagane \\, ponieważ \v i \t oznaczają znaki specjalne. Zauważ, że to, co pojawia się po (localdb)\\, jest nazwą twojej instancji LocalDb. v11.0 jest domyślną instancją publiczną, test to coś, co stworzyłem ręcznie, co jest prywatne.

  1. Jeśli masz bazę danych (.mdf pliku) już:

    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;" 
    
  2. Jeśli nie masz bazy danych SQL Server:

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

Możesz także utworzyć własną programistyczną bazę danych sojusznik:

a) zapisać go w domyślnej lokalizacji z ustawieniem domyślnym:

var query = "CREATE DATABASE myDbName;"; 

b) aby zapisać go w określonym miejscu z własnych ustawień niestandardowych:

// 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%)" + 
    ";"; 

I wykonać!

Tabela próbka może być załadowany do bazy danych z czymś takim:

@"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');"; 

Zauważ, że robi SqlLocalDb.exe narzędzie daje dostęp do baz danych, należy oddzielnie trzeba sqlcmd narzędzie, które jest smutne ..

EDIT : przesunięta pozycja średnika w przeciwnym razie wystąpiłby błąd, gdyby kod został skopiowany/wklejony

+0

Najlepsza odpowiedź, jaką kiedykolwiek widziałem! Właśnie zainstalowałem .Net 4.5.2 i wszystko jest gotowe! Z moją miłością! :)) –

+0

wydaje się, że connectionstring rozróżnia małe i wielkie litery. Muszę użyć "Server = (LocalDb) \ v11.0;" aby to działało. –

0

Mam ciąg połączenia Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;

i nawet .NET 3.5 program łączy i wykonuje SQL pomyślnie.

Jednak wiele osób twierdzi, że wymagany jest .NET 4.0.2 lub 4.5.

3

w SQL Server 2008 plików baz danych R2 można połączyć z

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

, ale w SQL Server 2012 można użyć to:

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

i to zależało od twojej .mdf.ldf wersji.

za znalezienie programmicaly użyć tej metody, która wyjaśnione w tym post

9

miałem ten sam problem na trochę. zauważyłem, że miałem:

Data Source= (localdb)\v11.0" 

po prostu przez dodanie jednego back-slash to rozwiązało problem dla mnie:

Data Source= (localdb)\\v11.0" 
+0

yes - '" \ v "' jest [zakładką pionową] (https://msdn.microsoft.com/en-us/library/4edbef7e%28v=vs.110%29.aspx). Bardzo ważne jest uciec '\". –

6

Jest to dość stary wątek, ale odkąd został ponownie zainstalować mój Visual Studio Społeczności 2015 dzisiaj, myślałem, że mogę dodać trochę informacji na temat tego, co używać na VS2015, lub co może działać w ogóle.

Aby zobaczyć, które instancje zostały zainstalowane domyślnie, wpisz sqllocaldb info w wierszu polecenia. Na moim komputerze otrzymuję dwa wystąpienia, pierwszy o nazwie MSSQLLocalDB.

C:\>sqllocaldb info 
MSSQLLocalDB 
ProjectsV13 

Można również utworzyć nową instancję jeśli chcesz, używając sqllocaldb create "some_instance_name", ale domyślny będzie działać dobrze:

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