2012-05-10 7 views
54

Sto provando a fare il primo passo del codice del framework entità (http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx).Qual è la stringa di connessione per localdb per la versione 11

Ho l'ultima di SQL Server Express e quando posso controllare le mie versioni disponibili tramite riga di comando (sqllocaldb informazioni): Vedo localdbApp1 e v11.0. Quando provo a eseguire la procedura dettagliata con alcune piccole modifiche, viene visualizzato un errore Impossibile connettersi.

mio app.config assomiglia a questo:

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

ho scritto un test di connessione semplice come qui sotto e il codice restituisce lo stesso errore SQL Connection ((fornitore: Canali denominati fornitore, errore: 40 - non poteva 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 inutilmente lì.

Qualche idea su quale dovrebbe essere la stringa di connessione?

+6

Non sto dicendo che questa è la causa del problema, perché potrebbe esserci di più, ma i backslash sono speciali nelle stringhe C# a meno che non li precediate da '@': '@" (LocalDB) \ v11.0 "'. – hvd

+1

True Non ho aggiunto il simbolo @. Ho provato e ho restituito lo stesso risultato. –

+0

Non c'è un database nella stringa di connessione. –

risposta

1

È necessario installare Dot Net 4.0.2 o successivo come indicato in here.
I bit 4.0 non capisce la sintassi richiesta dal LocalDB

See this question here

È possibile scaricare l'aggiornamento here

+0

ho già scaricato l'ultima. Ecco cosa mostra il mio Aiuto-> Informazioni su: Microsoft Visual Studio 2010 Versione 10.0.40219.1 SP1Rel Microsoft .NET Framework Versione 4.0.30319 SP1Rel –

+0

Suppongo che tu abbia l'ultima ora. Proprio come il mio. Controllato su Presentation.Core.dll con la versione 4.0.30319.275 (vs 245 su microsoft update article) – Steve

1

Questo è per altri che hanno lottato come me per ottenere questo lavoro ... .I sprecato più di mezza giornata su una cosa apparentemente banale ...

Se si desidera utilizzare SQL Express 2012 LocalDB da VS2010 è necessario avere installato la 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 dappertutto che è necessario "Framework 4.0.2 o Sopra" ho pensato che io sia bello andare ...

Tuttavia, quando ho esplicitamente scaricato che 4.0.2 di patch e installato ho ottenuto che funziona ....

17

ho installato il citato aggiornamento .Net 4.0.2 ma ho ottenuto lo stesso messaggio di errore che dice:

A network-related or instance-specific error occurred while establishing a connection to 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 realizzato che la mia applicazione è stata compilata per DotNet framework 3.5 ma SqlLocalDb funziona solo con DotNet 4.0.

Dopo aver risolto questo problema, il problema è stato risolto.

90

1) Richiede .NET framework 4 aggiornato almeno alla 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 

Se avete installato gli ultimi VS 2012 è probabile che si dispone già di 4.0.2. Basta verificare prima.

2) Quindi è necessario disporre di un'istanza di LocalDb. Per impostazione predefinita si dispone di un'istanza il cui nome è un singolo carattere v seguito dal numero di versione del rilascio LocalDB nel formato xx.x. Ad esempio, v11.0 rappresenta SQL Server 2012. Automatic instances are public by default. You can also have named instances which are 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. You can check the status of instances using the SqlLocalDb.exe utility (run it from command line).

3) Avanti la stringa di connessione dovrebbe essere simile:

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

o

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

dal codice. They both are the same. Avviso 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, test è qualcosa che ho creato manualmente che è privato.

  1. Se si dispone di un database (.mdf file) già:

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

Ed è possibile creare il proprio database programmatico alleato:

a) per salvarlo nella posizione predefinita con l'impostazione di default:

var query = "CREATE DATABASE myDbName;"; 

b) salvarlo in una posizione specifica con le proprie 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 possono essere caricati 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');"; 

Nota che SqlLocalDb.exe utilità doesnt consentono di accedere ai database, è necessario separatamente sqlcmd programma di utilità che è triste ..

EDIT : posizione spostata del punto e virgola altrimenti si verificherà un errore se il codice è stato copiato/incollato

+0

La migliore risposta che abbia mai visto! Ho appena installato. Net 4.5.2 e tutto è fatto! Con il mio amore! :)) –

+0

sembra che il connectiontring sia case sensitive per me. Devo usare "Server = (LocalDb) \ v11.0;" per farlo funzionare. –

0

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

e anche a .NET 3.Il programma 5 collega ed esegue correttamente SQL.

Ma molti dicono che è necessario .NET 4.0.2 o 4.5.

3

Nel file di database SQL Server 2008 R2 è possibile connettersi con

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

, ma in SQL Server 2012 è possibile utilizzare questo:

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

e dipendeva la versione .mdf.ldf.

per la ricerca di programmicaly Io uso questo metodo spiegato in questo post

9

ho avuto lo stesso problema per un po '. ho notato che ho avuto:

Data Source= (localdb)\v11.0" 

semplice aggiunta di un back-slash che ha risolto il problema per me:

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

sì - '" \ v "' è una [scheda verticale] (https://msdn.microsoft.com/en-us/library/4edbef7e%28v=vs.110%29.aspx). Sfuggire il '\' in qualche modo è importante. –

6

Questa è una discussione piuttosto vecchio, ma dal momento che stavo rimettendo il mio Visual Studio Oggi, nel 2015, ho pensato di aggiungere alcune informazioni su cosa usare su VS2015 o su 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 

È anche possibile creare una nuova istanza se lo si desidera, utilizzando sqllocaldb create "some_instance_name", ma quello di default funzionano bene:

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