web-dev-qa-db-fra.com

Quelle est la chaîne de connexion pour localdb pour la version 11

J'essaie de faire la première procédure pas à pas du code du framework d'entité ( http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first -walkthrough.aspx ).

J'ai la dernière version de SQL Server Express et lorsque je vérifie mes versions disponibles via la ligne de commande ( sqllocaldb info ): je vois localdbApp1 et v11.0. Lorsque j'essaie d'exécuter la procédure avec quelques modifications mineures, j'obtiens une erreur de connexion impossible.

Mon app.config ressemble à ceci:

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

J'ai écrit un test de connexion simple comme ci-dessous et le code renvoie la même erreur de connexion SQL ((fournisseur: fournisseur de canaux nommés, erreur: 40 - Impossible d'ouvrir une connexion à SQL Server)).

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

J'ai essayé de remplacer "Data Source=..." avec "Server=..." mais en vain.

Des idées ce que la chaîne de connexion devrait être?

62
Bill Nielsen

1) Nécessite .NET Framework 4 mis à jour à la version 4.0.2 au minimum. Si vous avez 4.0.2, alors vous devriez avoir

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

Si vous avez installé la dernière version de VS 2012, il est probable que vous possédiez déjà la version 4.0.2. Juste vérifier d'abord.

2) Ensuite, vous devez avoir une instance de LocalDb. Par défaut, vous avez une instance dont le nom est un seul caractère v suivi du numéro de version de la version de LocalDB au format xx.x. Par exemple, v11.0 Représente SQL Server 2012. Les instances automatiques sont publiques par défaut. Vous pouvez également avoir des instances nommées qui sont privées . Les instances nommées fournissent une isolation par rapport aux autres instances et peuvent améliorer les performances en réduisant les conflits de ressources avec les autres utilisateurs de la base de données. Vous pouvez vérifier le statut des instances à l'aide de l'utilitaire SqlLocalDb.exe (Exécutez-le à partir de la ligne de commande).

3) Ensuite, votre chaîne de connexion devrait ressembler à ceci:

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

ou

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

à partir de votre code . Les deux sont identiques. Notez les deux \\ Requis car \v Et \t Signifient des caractères spéciaux. Notez également que ce qui apparaît après (localdb)\\ Est le nom de votre instance LocalDb. v11.0 Est l'instance publique par défaut, test est quelque chose que j'ai créé manuellement et qui est privé.

  1. Si vous avez déjà une base de données (fichier .mdf):

    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
    
  2. Si vous ne disposez pas d'une base de données Sql Server:

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

Et vous pouvez créer votre propre base de données par programme:

a) pour l'enregistrer à l'emplacement par défaut avec le réglage par défaut:

var query = "CREATE DATABASE myDbName;";

b) Pour l'enregistrer dans un emplacement spécifique avec vos propres paramètres personnalisés:

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

Et exécuter!

Un exemple de table peut être chargé dans la base de données avec les éléments suivants:

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

Notez que l'utilitaire SqlLocalDb.exe Ne vous donne pas accès aux bases de données, vous avez séparément besoin de l'utilitaire sqlcmd qui est triste ..

EDIT: position déplacée du point-virgule, sinon une erreur se produirait si le code était copié/collé

95
nawfal

J'ai installé la mise à jour mentionnée .Net 4.0.2 mais j'ai reçu le même message d'erreur disant:

Une erreur liée au réseau ou à une instance spécifique s'est produite lors de l'établissement d'une connexion à SQL Server

J'ai vérifié le SqlLocalDb via la console comme suit:

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

Cela signifie que SqlLocalDb est installé et fonctionne correctement. Alors, quelle est la raison pour laquelle je ne pouvais pas me connecter à SqlLocalDB via du code .Net avec cette chaîne de connexion: Server=(LocalDB)\v11.0;Integrated Security=true;?

Ensuite, j'ai réalisé que mon application était compilée pour DotNet Framework 3.5, mais SqlLocalDb ne fonctionne que pour DotNet 4.0.

Après avoir corrigé cela, le problème a été résolu.

17
Eduardo Fernandes

C'est un sujet assez ancien, mais depuis que je réinstalle aujourd'hui ma communauté Visual Studio 2015, j'ai pensé pouvoir ajouter quelques informations sur les éléments à utiliser sur VS2015 ou sur les éléments susceptibles de fonctionner en général.

Pour voir quelles instances ont été installées par défaut, tapez sqllocaldb info dans une invite de commande. Sur ma machine, j'ai deux instances, la première nommée MSSQLLocalDB.

C:\>sqllocaldb info
MSSQLLocalDB
ProjectsV13

Vous pouvez également créer une nouvelle instance si vous le souhaitez, en utilisant sqllocaldb create "some_instance_name", mais celui par défaut fonctionnera très bien:

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

J'ai eu le même problème pendant un moment. J'ai remarqué que j'avais:

Data Source= (localdb)\v11.0"

Simplement en ajoutant une barre oblique inverse, le problème a été résolu:

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

Dans les fichiers de base de données SQL Server 2008 R2, vous pouvez vous connecter avec

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

uniquement, mais dans SQL Server 2012, vous pouvez utiliser ceci:

Serveur = (localdb)\v11.0; Sécurité intégrée = true; Base de données = DB1;

et cela dépendait de votre .mdf.ldf version.

pour trouver programmicaly j'utilise cette méthode qui a expliqué dans ce post

3
yeye

C’est pour ceux qui se seraient battus comme moi pour que cela fonctionne ... j’ai perdu plus d’une demi-journée sur une chose apparemment triviale ...

Si vous souhaitez utiliser SQL Express 2012 LocalDB de VS2010, vous devez installer ce correctif http://www.Microsoft.com/en-us/download/details.aspx?id=27756

Juste comme mentionné dans les commentaires ci-dessus, j'avais aussi Microsoft .NET Framework Version 4.0.30319 SP1Rel et depuis sa mention partout que vous avez besoin de "Framework 4.0.2 ou supérieur" Je pensais que je suis bon pour aller ...

Cependant, quand j'ai explicitement téléchargé ce correctif 4.0.2 et que je l'ai installé, je l'ai fait fonctionner ....

1
Arif Eqbal

Vous devez installer Dot Net 4.0.2 ou supérieur comme mentionné ici .
Les 4.0 bits ne comprennent pas la syntaxe requise par LocalDB

Voir cette question ici

Vous pouvez télécharger la mise à jour ici

1
Steve

J'ai une chaîne de connexion Server=(localdb)\v11.0;Integrated Security=true;Database=DB1;

et même un programme . NET 3.5 se connecte et exécute SQL avec succès.

Mais beaucoup de gens disent que .NET 4.0.2 ou 4.5 est requis.

0
linquize