2012-05-10 35 views
54

Estoy tratando de hacer el primer tutorial de código de la entidad marco (http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx).¿Cuál es la cadena de conexión para localdb para la versión 11

Tengo el último SQL Server Express y cuando reviso mis versiones disponibles a través de la línea de comandos (sqllocaldb info): Veo localdbApp1 y v11.0. Cuando trato de ejecutar el tutorial con algunos ajustes menores, recibo un error de "no puedo conectar".

Mi app.config se parece a esto:

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

me escribió una prueba de conexión simple, como a continuación y el código devuelve el mismo error de conexión SQL ((proveedor: proveedor de canalizaciones, error: 40 - No se pudo abrir una conexión a SQL Server)).

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

He intentado reemplazar "Data Source=..." con "Server=..." pero fue en vano allí.

¿Alguna idea de cuál debe ser la cadena de conexión?

+6

No estoy diciendo que esta es la causa del problema, porque bien puede haber más, pero las barras invertidas son especiales en cadenas de C# a menos que las preceda por '@': '@" (LocalDB) \ v11.0 "'. – hvd

+1

Es cierto que no agregué el símbolo @. Lo reintenté y devolví el mismo resultado. –

+0

No hay una base de datos en su cadena de conexión. –

Respuesta

1

Necesita instalar Dot Net 4.0.2 o superior como se menciona here.
Los bits de 4.0 no entienden la sintaxis requerida por LocalDB

See this question here

Puede descargue la actualización here

+0

ya he descargado la última. Esto es lo que mi Ayuda-> Acerca de ... muestra: Microsoft Visual Studio 2010 Versión 10.0.40219.1 SP1Rel Microsoft .NET Framework Versión 4.0.30319 SP1Rel –

+0

Supongo que tiene la última entonces. Como el mio. Marcado en Presentation.Core.dll con la versión 4.0.30319.275 (frente a 245 en el artículo de actualización de Microsoft) – Steve

1

Esto es para otros que han luchado como yo para conseguir este trabajo ... .I desperdicia más de la mitad de un día en una cosa aparentemente trivial ...

Si desea utilizar SQL Express 2012 LocalDB de VS2010 debe tener instalado este parche http://www.microsoft.com/en-us/download/details.aspx?id=27756

Como mencioné en los comentarios anteriores, yo también tenía Microsoft .NET Framework versión 4.0.30319 SP1Rel y como se menciona en todas partes que necesita "Framework 4.0.2 o superior", pensé que era bueno ...

sin embargo, cuando descargué explícitamente que 4.0.2 parche y lo instaló lo tengo trabajo ....

17

he instalado la actualización 4.0.2 .Net mencionado pero tiene el mismo mensaje de error que dice:

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

Comprobé el SqlLocalDb a través de la consola de la siguiente manera:

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 

Esto significa que SqlLocalDb está instalado y funcionando correctamente. Entonces, ¿cuál fue el motivo por el que no pude conectarme a SqlLocalDB a través del código .Net con esta conexión: Server=(LocalDB)\v11.0;Integrated Security=true;?

Luego me di cuenta de que mi aplicación fue compilada para DotNet framework 3.5 pero SqlLocalDb solo funciona para DotNet 4.0.

Después de corregir esto, se solucionó el problema.

90

1) Requiere .NET framework 4 actualizado al menos a 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 

caso de haber instalado últimas VS 2012 lo más probable es que ya tiene 4.0.2. Solo verifica primero.

2) A continuación debe tener una instancia de LocalDb. De forma predeterminada, tiene una instancia cuyo nombre es un solo carácter v seguido del número de versión de lanzamiento de LocalDB en el formato xx.x. Por ejemplo, v11.0 representa SQL Server 2012. Automatic instances are public by default. You can also have named instances which are private. Las instancias con nombre proporcionan aislamiento de otras instancias y pueden mejorar el rendimiento al reducir la contención de recursos con otros usuarios de la base de datos. You can check the status of instances using the SqlLocalDb.exe utility (run it from command line).

3) A continuación la cadena de conexión debe verse como:

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

o

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

a partir del código. They both are the same. Observe que se requieren los dos \\ porque \v y \t significan caracteres especiales. También tenga en cuenta que lo que aparece después de (localdb)\\ es el nombre de su instancia de LocalDb. v11.0 es la instancia pública predeterminada, test es algo que he creado manualmente, que es privado.

  1. Si usted tiene una base de datos (archivo .mdf) ya:

    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;" 
    
  2. Si usted no tiene una base de datos del servidor SQL:

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

Y puede crear su propia base de datos programática aliado:

a) para guardarlo en la ubicación predeterminada con la configuración predeterminada:

var query = "CREATE DATABASE myDbName;"; 

b) Para guardar en un lugar específico con sus propios ajustes personalizados:

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

¡Y ejecutar!

una tabla de muestra se pueden cargar en la base de datos con algo como:

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

Tenga en cuenta que la utilidad SqlLocalDb.exe NO DA acceso a bases de datos, es necesario separado sqlcmd utilidad que es triste ..

EDITAR : posición movida de punto y coma; de lo contrario, se produciría un error si el código fuera copiado/pegado

+0

¡La mejor respuesta que he visto! ¡Acabo de instalar .Net 4.5.2 y todo está listo! ¡Con mi amor! :)) –

+0

Parece que la conexión es sensible a mayúsculas y minúsculas para mí. Tengo que usar "Servidor = (LocalDb) \ v11.0;" para hacer que funcione –

0

Tengo una secuencia de conexión Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;

e incluso un .NET 3.El programa 5 conecta y ejecuta SQL satisfactoriamente.

Pero mucha gente dice que se requiere .NET 4.0.2 o 4.5.

3

En Server 2008 archivos de base de R2 SQL que puede conectar con

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

, pero en SQL Server 2012 se puede utilizar este:

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

y que dependía de su versión .mdf.ldf.

para encontrar programmicaly i utilizar este método que se explica en esta post

9

tuve el mismo problema para un poco. me di cuenta que tenía:

Data Source= (localdb)\v11.0" 

Simplemente añadiendo una barra invertida se resolvió el problema para mí:

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

yes - '" \ v "' es una [pestaña vertical] (https://msdn.microsoft.com/en-us/library/4edbef7e%28v=vs.110%29.aspx). Escapar el '\ 'de alguna manera es importante. –

6

Es un tema bastante antiguo, pero como estaba instalar de nuevo mi Visual Studio Comunidad 2015 hoy, pensé que podría agregar algo de información sobre qué usar en VS2015, o qué podría funcionar en general.

Para ver qué instancias se instalaron de forma predeterminada, escriba sqllocaldb info dentro de un símbolo del sistema. En mi máquina, obtengo dos instancias, la primera llamada MSSQLLocalDB.

C:\>sqllocaldb info 
MSSQLLocalDB 
ProjectsV13 

También puede crear una nueva instancia si lo desea, utilizando sqllocaldb create "some_instance_name", pero el que viene por defecto va a funcionar muy bien:

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