Qual è la stringa di connessione per localdb per la versione 11

Sto provando a fare il Code First Walkthrough del framework di entity framework ( http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx ).

Ho l’ultimo SQL Server Express e quando controllo le mie versioni disponibili tramite la riga di comando ( informazioni sqllocaldb ): vedo localdbApp1 e v11.0. Quando provo a eseguire la procedura dettagliata con alcune piccole modifiche, viene visualizzato un errore Imansible connettersi.

La mia app.config ha questo aspetto:

 

Ho scritto un semplice test di connessione come di seguito e il codice restituisce lo stesso errore di connessione SQL ((provider: Named Pipes Provider, errore: 40 – Imansible aprire una connessione a SQL Server)).

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

Ho provato a sostituire "Data Source=..." con "Server=..." ma senza successo.

Qualche idea su quale dovrebbe essere la stringa di connessione?

1) Richiede .NET framework 4 aggiornato almeno alla 4.0.2. Se hai 4.0.2, allora dovresti avere

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

Se hai installato le ultime VS 2012 è probabile che tu abbia già 4.0.2. Basta verificare prima.

2) Successivamente è necessario disporre di un’istanza di LocalDb . Di default hai un’istanza il cui nome è un singolo carattere v seguito dal numero di versione della versione LocalDB nel formato xx.x. Ad esempio, v11.0 rappresenta SQL Server 2012. Le istanze automatiche sono pubbliche per impostazione predefinita. Puoi anche avere istanze denominate che sono private . Le istanze con nome forniscono isolamento da altre istanze e possono migliorare le prestazioni riducendo il conflitto di risorse con altri utenti del database. È ansible controllare lo stato delle istanze utilizzando l’utilità SqlLocalDb.exe ( SqlLocalDb.exe dalla riga di comando).

3) La stringa di connessione successiva dovrebbe essere simile a:

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

o

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

dal tuo codice . Entrambi sono uguali. Notare i due \\ richiesti perché \v e \t indicano caratteri speciali. Si noti inoltre che ciò che appare dopo (localdb)\\ è il nome dell’istanza LocalDb. v11.0 è l’istanza pubblica predefinita, il test è qualcosa che ho creato manualmente e che è privato.

  1. Se hai già un database (file .mdf):

     "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;" 
  2. Se non si dispone di un database Sql Server:

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

E puoi creare il tuo database a livello di codice:

a) per salvarlo nella posizione predefinita con l’impostazione predefinita:

 var query = "CREATE DATABASE myDbName;"; 

b) Per salvarlo in una posizione specifica con le tue impostazioni personalizzate:

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

Ed esegui!

Una tabella di esempio può essere caricata nel database con qualcosa di simile:

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

Si noti che SqlLocalDb.exe utilità SqlLocalDb.exe fornisce l’accesso ai database, è necessario sqlcmd utilità sqlcmd separatamente che è triste ..

EDIT: posizione spostata del punto e virgola altrimenti si sarebbe verificato un errore se il codice era stato copiato / incollato

Ho installato l’aggiornamento .Net 4.0.2 menzionato, ma ho ricevuto lo stesso messaggio di errore che diceva:

Si è verificato un errore relativo alla rete o specifico dell’istanza mentre si stabiliva una connessione a SQL Server

Ho controllato SqlLocalDb tramite console come segue:

 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 

Ciò significa che SqlLocalDb è installato e funziona correttamente. Quindi, qual è stata la ragione per cui non sono riuscito a connettermi a SqlLocalDB tramite il codice .Net con questo connectiontring: Server=(LocalDB)\v11.0;Integrated Security=true; ?

Poi ho capito che la mia applicazione è stata compilata per DotNet framework 3.5 ma SqlLocalDb funziona solo per DotNet 4.0.

Dopo aver corretto ciò, il problema è stato risolto.

Ho avuto lo stesso problema per un po ‘. Ho notato che avevo:

 Data Source= (localdb)\v11.0" 

Semplicemente aggiungendo un back-swash ha risolto il problema per me:

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

Questo è un thread abbastanza vecchio, ma poiché stavo reinstallando la mia comunità di Visual Studio 2015 oggi, ho pensato di aggiungere alcune informazioni su cosa usare su VS2015, o cosa potrebbe funzionare in generale.

Per vedere quali istanze sono state installate per impostazione predefinita, digitare sqllocaldb info all’interno di un prompt dei comandi. Sulla mia macchina, ottengo due istanze, la prima denominata MSSQLLocalDB .

 C:\>sqllocaldb info MSSQLLocalDB ProjectsV13 

Puoi anche creare una nuova istanza se lo desideri, usando sqllocaldb create "some_instance_name" , ma quello predefinito funzionerà perfettamente:

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

Nei file di database Sql Server 2008 R2 con cui è ansible connettersi

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

solo, ma in SQL Server 2012 è ansible utilizzare questo:

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

e dipendeva dalla tua versione .mdf .ldf .

per la ricerca programmatica io uso questo metodo che ha spiegato in questo post

È necessario installare Dot Net 4.0.2 o successivo come menzionato qui .
I 4.0 bit non comprendono la syntax richiesta da LocalDB

Vedi questa domanda qui

Puoi scaricare l’aggiornamento qui

Questo è per gli altri che avrebbero faticato come me per farlo funzionare … Ho perso più di mezza giornata in una cosa apparentemente banale …

Se si desidera utilizzare SQL Express 2012 LocalDB da VS2010, è necessario installare questa patch http://www.microsoft.com/en-us/download/details.aspx?id=27756

Proprio come menzionato nei commenti sopra ho anche Microsoft .NET Framework versione 4.0.30319 SP1Rel e dal suo accennato ovunque che è necessario “Framework 4.0.2 o Sopra” ho pensato che io sia bello andare …

Tuttavia, quando ho scaricato esplicitamente quella patch 4.0.2 e l’ho installata, l’ho fatta funzionare …

Ho una stringa di connessione Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;

e persino un programma .NET 3.5 connette ed esegue SQL con successo.

Ma molte persone dicono che è necessario .NET 4.0.2 o 4.5.