c# - ejemplo - connection string sql server windows authentication
¿Cuál es la cadena de conexión para localdb para la versión 11? (8)
Estoy tratando de hacer el primer tutorial sobre el código del marco de la entidad ( http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx )
Tengo el último SQL Server Express y cuando reviso mis versiones disponibles a través de la línea de comandos ( información de sqllocaldb ): veo localdbApp1 y v11.0. Cuando trato de ejecutar el tutorial con algunos ajustes menores, obtengo un error de "no puedo conectar".
Mi app.config se ve así:
<parameter value="Server=(LocalDB)/v11.0; Integrated Security=True; MultipleActiveResultSets=True" />
Escribí 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 con nombre, error: 40 - No se pudo abrir una conexión con 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.
¿Alguna idea de lo que debería ser la cadena de conexión?
1) Requiere .NET framework 4 actualizado al menos a 4.0.2. Si tiene 4.0.2, entonces debería tener
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/v4.0.30319/SKUs/.NETFramework,Version=v4.0.2
Si ha instalado las últimas VS 2012, es probable que ya tenga 4.0.2. Solo verifica primero.
2) Luego necesita 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. Las instancias automáticas son públicas por defecto. También puede tener instancias con nombre que sean privadas . 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. Puede verificar el estado de las instancias usando la utilidad SqlLocalDb.exe
(ejecútelo desde la línea de comandos).
3) Luego su cadena de conexión debería verse así:
"Server=(localdb)//v11.0;Integrated Security=true;"
o
"Data Source=(localdb)//test;Integrated Security=true;"
de tu código Ambos son lo mismo. Observe que los dos //
obligatorios porque /v
y /t
significa caracteres especiales. También tenga en cuenta que lo que aparece después (localdb)//
es el nombre de su instancia de LocalDb. v11.0
es la instancia pública predeterminada, la test
es algo que he creado manualmente, que es privado.
Si ya tienes una base de datos (archivo .mdf):
"Server=(localdb)//Test;Integrated Security=true;AttachDbFileName= myDbFile;"
Si no tiene una base de datos de servidor Sql:
"Server=(localdb)//v11.0;Integrated Security=true;"
Y puede crear su propia base de datos mediante programación:
a) para guardarlo en la ubicación predeterminada con la configuración predeterminada:
var query = "CREATE DATABASE myDbName;";
b) Para guardarlo en una ubicación específica con su propia configuración personalizada:
// 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 ejecuta!
Se puede cargar una tabla de muestra 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 le da acceso a las bases de datos, por separado necesita la utilidad sqlcmd
, 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
En los archivos de base de datos de Sql Server 2008 R2 puede conectarse con
Server=np://./pipe/YourInstance/tsql/query;InitialCatalog=yourDataBase;Trusted_Connection=True;
solo, pero en sql Server 2012 puede usar esto:
Servidor = (localdb) / v11.0; Seguridad integrada = verdadera; Base de datos = DB1;
y dependía de tu versión .mdf
.ldf
.
para encontrar programmicaly uso este Método que se explica en esta post
Este es un hilo bastante antiguo, pero como estaba reinstalando mi comunidad de Visual Studio 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 manera 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, usando sqllocaldb create "some_instance_name"
, pero el predeterminado funcionará bien:
// if not using a verbatim string literal, don''t forget to escape backslashes
@"Server=(localdb)/MSSQLLocalDB;Integrated Security=true;"
Esto es para otros que habrían luchado como yo para que esto funcione ... Perdí más de medio día en algo aparentemente trivial ...
Si desea utilizar LocalDB de SQL Express 2012 desde VS2010, debe tener este parche instalado 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 ir ...
Sin embargo, cuando descargué explícitamente ese parche 4.0.2 y lo instalé, lo hice funcionar ...
Instalé la mencionada actualización .Net 4.0.2 pero recibí el mismo mensaje de error que decía:
Se produjo un error relacionado con la red o específico de la instancia al establecer una conexión con 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 ejecutándose 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 de enlace: 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, el problema fue resuelto.
Tengo la cadena de conexión Server=(localdb)/v11.0;Integrated Security=true;Database=DB1;
e incluso un programa .NET 3.5 conecta y ejecuta SQL exitosamente.
Pero mucha gente dice que se requiere .NET 4.0.2 o 4.5.
Tuve el mismo problema por un tiempo. Me di cuenta de que tenía:
Data Source= (localdb)/v11.0"
Simplemente agregando una barra invertida resolvió el problema para mí:
Data Source= (localdb)//v11.0"