Qual é a string de conexão para o localdb para a versão 11

Estou tentando fazer o primeiro passo do framework da entidade Code ( http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx ).

Eu tenho o mais recente SQL Server Express e quando eu verificar minhas versões disponíveis via linha de comando ( informações sqllocaldb ): vejo localdbApp1 e v11.0. Quando eu tento executar o passo a passo com alguns pequenos ajustes, eu recebo um erro não é possível conectar.

Meu app.config se parece com isso:

 

Eu escrevi um teste de conexão simples como abaixo e o código retorna o mesmo erro de conexão SQL ((provedor: Named Pipes Provider, erro: 40 – não foi possível abrir uma conexão com o SQL Server)).

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

Eu tentei replace "Data Source=..." com "Server=..." mas sem sucesso lá.

Alguma idéia de qual deve ser a string de conexão?

1) Requer o .NET framework 4 atualizado para pelo menos 4.0.2. Se você tem 4.0.2, então você deve ter

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

Se você instalou o VS 2012 mais recente, as chances são de que você já tenha 4.0.2. Apenas verifique primeiro.

2) Em seguida, você precisa ter uma instância de LocalDb . Por padrão, você tem uma instância cujo nome é um único caractere v seguido pelo número da versão da release do LocalDB no formato xx.x. Por exemplo, v11.0 representa o SQL Server 2012. As instâncias automáticas são públicas por padrão. Você também pode ter instâncias nomeadas que são particulares . As instâncias nomeadas fornecem isolamento de outras instâncias e podem melhorar o desempenho reduzindo a contenção de resources com outros usuários do database. Você pode verificar o status das instâncias usando o utilitário SqlLocalDb.exe (execute-o a partir da linha de comando).

3) Em seguida, sua string de conexão deve se parecer com:

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

ou

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

do seu código . Ambos são iguais. Observe os dois \\ requeridos porque \v e \t significam caracteres especiais. Observe também que o que aparece após (localdb)\\ é o nome da sua instância do LocalDb. v11.0 é a instância pública padrão, test é algo que eu criei manualmente, que é privado.

  1. Se você já tem um database (arquivo .mdf):

     "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;" 
  2. Se você não tiver um database do Sql Server:

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

E você pode criar seu próprio database programaticamente:

a) para salvá-lo no local padrão com a configuração padrão:

 var query = "CREATE DATABASE myDbName;"; 

b) Para salvá-lo em um local específico com suas próprias configurações personalizadas:

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

E execute!

Uma tabela de amostra pode ser carregada no database com algo como:

  @"CREATE TABLE supportContacts ( id int identity primary key, type varchar(20), details varchar(30) ); INSERT INTO supportContacts (type, details) VALUES ('Email', 'admin@sqlfiddle.com'), ('Twitter', '@sqlfiddle');"; 

Note que o utilitário SqlLocalDb.exe não lhe dá access aos bancos de dados, você separadamente precisa do utilitário sqlcmd que é triste ..

EDIT: mudou a posição de ponto-e-vírgula caso contrário, o erro ocorreria se o código fosse copiado / colado

Eu instalei a atualização .Net 4.0.2 mencionada, mas recebi a mesma mensagem de erro dizendo:

Ocorreu um erro relacionado à rede ou a uma instância específica ao estabelecer uma conexão com o SQL Server

Eu verifiquei o SqlLocalDb via console da seguinte forma:

 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 

Isso significa que o SqlLocalDb está instalado e funcionando corretamente. Então, qual foi a razão que eu não consegui conectar ao SqlLocalDB via código .Net com este connectionstring: Server=(LocalDB)\v11.0;Integrated Security=true; ?

Então percebi que meu aplicativo foi compilado para o DotNet Framework 3.5, mas o SqlLocalDb só funciona para o DotNet 4.0.

Depois de corrigir isso, o problema foi resolvido.

Eu tive o mesmo problema por um tempo. Eu notei que eu tinha:

 Data Source= (localdb)\v11.0" 

Simplesmente adicionando uma barra invertida, resolveu o problema para mim:

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

Este é um thread bastante antigo, mas desde que eu estava reinstalando minha Comunidade Visual Studio 2015 hoje, eu pensei que poderia adicionar algumas informações sobre o que usar no VS2015, ou o que poderia funcionar em geral.

Para ver quais instâncias foram instaladas por padrão, digite sqllocaldb info dentro de um prompt de comando. Na minha máquina, recebo duas instâncias, a primeira chamada MSSQLLocalDB .

 C:\>sqllocaldb info MSSQLLocalDB ProjectsV13 

Você também pode criar uma nova instância, se desejar, usando sqllocaldb create "some_instance_name" , mas o padrão funcionará bem:

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

Nos arquivos de database do Sql Server 2008 R2, você pode se conectar

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

apenas, mas no sql Server 2012 você pode usar isto:

Servidor = (localdb) \ v11.0; Segurança Integrada = true; Banco de Dados = DB1;

e dependia da sua versão .mdf .ldf .

para encontrar programmicaly eu uso este método que explicou neste post

Você precisa instalar o Dot Net 4.0.2 ou superior, como mencionado aqui .
Os 4.0 bits não entendem a syntax requerida pelo LocalDB

Veja esta pergunta aqui

Você pode baixar a atualização aqui

Isto é para outros que teriam lutado como eu para conseguir este trabalho … eu perdi mais de metade de um dia em uma coisa aparentemente trivial …

Se você quiser usar o SQL Server 2012 LocalDB a partir do VS2010, você deve ter este patch instalado http://www.microsoft.com/en-us/download/details.aspx?id=27756

Assim como mencionado nos comentários acima, eu também tinha o Microsoft .NET Framework Versão 4.0.30319 SP1Rel e desde que é mencionado em todos os lugares que você precisa de “Framework 4.0.2 ou acima” eu pensei que eu sou bom para ir …

No entanto, quando eu baixei explicitamente o patch 4.0.2 e o instalei, consegui que funcionasse ….

Eu tenho seqüência de conexão Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;

e até um programa .NET 3.5 conecta e executa o SQL com sucesso.

Mas muitas pessoas dizem que o .NET 4.0.2 ou 4.5 é necessário.