67 votes

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

Je suis en train de faire le Premier Code de Procédure pas à pas de l'entity framework ( 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 quand 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 pas à pas avec quelques modifications mineures, je reçois un ne peut pas se connecter erreur.

Mon application.config ressemble à ceci:

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

J'ai écrit un simple test de connexion 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.

Les idées de ce que la chaîne de connexion doit être?

100voto

nawfal Points 13500

1) l'Exige .NET framework 4 mis à jour au moins 4.0.2. 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é les dernières VS 2012 les chances sont que vous avez déjà 4.0.2. Suffit de vérifier en premier.

2) Ensuite, vous devez avoir une instance de LocalDb. Par défaut, vous disposez d'une instance dont le nom est unique, v caractère, suivi par le LocalDB version numéro de version dans le format xx.x. Par exemple, v11.0 représente SQL Server 2012. Automatique instances sont publics par défaut. Vous pouvez également avoir nommé les instances qui en sont privés. Les instances nommées assurer l'isolement à partir d'autres instances et d'améliorer les performances en réduisant les conflits de ressources avec d'autres utilisateurs de base de données. Vous pouvez vérifier le statut des instances à l'aide de l' SqlLocalDb.exe utilitaire (à exécuter en ligne de commande).

3) à Côté de votre chaîne de connexion doit ressembler à:

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

ou

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

à partir de votre code. Ils ont tous les deux sont les mêmes. Remarquez les deux \\ nécessaire car l' \v et \t moyen de caractères spéciaux. Notez également que ce qui apparaît après (localdb)\\ est le nom de votre LocalDb instance. v11.0 la valeur par défaut est public de l'instance, test est quelque chose que j'ai créé manuellement ce qui est privé.

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

    "Server=(localdb)\\Test;Integrated Security=true;AttachDbFileName= myDbFile;"
    
  2. Si vous n'avez pas de 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 programmation:

a) pour l'enregistrer à l'emplacement par défaut avec la configuration 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 de les exécuter!

Un exemple de table peut être chargé dans la base de données avec quelque chose comme:

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

Notez que SqlLocalDb.exe utilitaire ne marche pas vous donner accès à des bases de données, vous séparément besoin d' sqlcmd utilitaire qui est triste..

EDIT: déplacé de la position de point-virgule sinon erreur se produit si le code a été copié/collé

19voto

Eduardo Fernandes Points 111

J'ai installé le mentionné .Net 4.0.2 mise à jour mais j'ai eu le même message d'erreur disant:

Une liée au réseau ou spécifique à l'instance erreur 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 que je ne pouvais pas se connecter à SqlLocalDB via .Net code avec cette connectionstring: Server=(LocalDB)\v11.0;Integrated Security=true;?

Puis j'ai réalisé que ma demande a été compilé pour DotNet framework 3.5 mais SqlLocalDb ne fonctionne que pour DotNet 4.0.

Après cette correction, le problème a été résolu.

3voto

yeye Points 38

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

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

seulement, mais dans sql Server 2012, vous pouvez utiliser ceci:

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

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

pour trouver programmicaly j'utilise cette Méthode qui est expliqué dans ce post

1voto

Steve Points 96477

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

Voir cette question ici

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

1voto

Arif Eqbal Points 1109

C'est pour ceux qui ont du mal comme moi à obtenir ce travail....J'ai perdu plus d'une demi-journée sur un anodin chose...

Si vous souhaitez utiliser SQL 2012 Express LocalDB de VS2010 vous devez avoir installé ce patch http://www.microsoft.com/en-us/download/details.aspx?id=27756

Comme mentionné dans les commentaires ci-dessus j'ai trop eu de Microsoft .NET Framework Version 4.0.30319 SP1Rel et depuis sa mentionné partout où vous avez besoin d'un "Framework 4.0.2 ou au-Dessus" j'ai pensé que je suis bon pour aller...

Cependant, quand j'ai explicitement téléchargé que 4.0.2 patch et installé, j'ai eu de travail....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X