IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

LocalDB : se connecter à une base déjà ouverte


Sujet :

MS SQL Server

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut LocalDB : se connecter à une base déjà ouverte
    Bonjour,

    J'ai un programme web qui tourne avec IIS Express + LocalDB.

    Je n'ai pas la main sur son code.

    Je souhaite l'enrichir en ajoutant des pages ASPX qui vont faire des requêtes SQL dans la base de données.

    Seulement, lorsque je tente de me connecter à la base, je me retrouve avec cette erreur :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ERROR [28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'DESKTOP-AMHHFSP\Sylvain Devidal'.
    ERROR [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Cannot open database "C:\ProgramData\update.crm_webofflinedb\offline.mdf " requested by the login. The login failed.
    ERROR [01S00] [Microsoft][SQL Server Native Client 11.0]Invalid connection string attribute
    ERROR [28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'DESKTOP-AMHHFSP\Sylvain Devidal'.
    ERROR [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Cannot open database "C:\ProgramData\update.crm_webofflinedb\offline.mdf " requested by the login. The login failed.
    ERROR [01S00] [Microsoft][SQL Server Native Client 11.0]Invalid connection string attribute

    Je tente d'utiliser la même chaîne de connexion que le logiciel (chaîne ODBC) :
    Driver=SQL Server Native Client 11.0;Server=(LocalDB)\mssqllocaldb;Integrated Security=true;Database=C:\ProgramData\update.crm_webofflinedb\offline.mdf

    Si je regarde dans la liste des processus, localdb tourne avec mon identité.
    La ligne de commande exécutée par le logiciel est la suivante :
    C:\Program Files\Microsoft SQL Server\120\LocalDB\Binn\\sqlservr.exe" -c -SMSSQL12E.LOCALDB -sLOCALDB#949D22E1 -d"C:\Users\Sylvain Devidal\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\mssqllocaldb\master.mdf" -l"C:\Users\Sylvain Devidal\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\mssqllocaldb\mastlog.ldf" -e"C:\Users\Sylvain Devidal\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\mssqllocaldb\error.log

    Une idée de comment faire pour que je puisse me connecter pendant que l'application tourne déjà ?
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Je ne sais si cela peut t'aider, mais voilà ci-dessous pour info la chaine de connexion que j'ai pu établir depuis Visual Studio 2015 sur l'instance localDb par défaut (localdb)\MSSQLLocalDB et la base de données MA_BASE_DE_DONNEES de cette même instance (localdb)\MSSQLLocalDB
    Connection sring :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=MA_BASE_DE_DONNEES;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False
    Dans cet exemple MA_BASE_DE_DONNEES représente le nom de la base de données

    PS : Je n'ai jamais testé la connexion ODBC à mes différentes instances lolcaldb (hé oui j'en ai plusieurs instances localdb !).

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    ta deuxième connexion doit utiliser le nom de l'instance créée, et non pas (localdb)\mssqllocaldb. il semblerait que ton instance soit LOCALDB#949D22E1

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Pour connaitre le "Nom du canal de l'instance localdb", notamment pour les applications héritées (généralement celles qui donnent aussi des irritations !), il faut lancer dans une fenêtre de commande DOS, l'exemple de la commande ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\Program Files\Microsoft SQL Server\120\Tools\Binn>SqlLocalDB.exe info "MSSQLLocalDB"
    Nom :               MSSQLLocalDB
    Version :            12.0.2000.8
    Nom partagé :
    Propriétaire :               MOI-MEME ! 
    Création automatique :        Oui
    État :              En cours d''exécution
    Dernière heure de début :    11/03/2016 14:11:09
    Nom de canal de l''instance : np:\\.\pipe\LOCALDB#FF8C9139\tsql\query
    Dans cet exemple le "Nom du canal de l'instance localdb" est :

    np:\\.\pipe\LOCALDB#FF8C9139\tsql\query

    Il est pour les instances LocalDB l'équivalent du nom d'une instance "normale" que celle-ci soit une instance par défaut ou une instance nommée.

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Là, je pige plus rien...

    Y'a un truc dans IIS (Express) qui me bride j'ai l'impression.

    En effet, je viens de faire un programme de type console. Et les deux chaînes de connexion fonctionnent !

    Comme si parceque je suis à l'intérieur d'un process IIS, j'ai pas accès au fichier, ou un truc du genre.

    En effet, si je change la chaîne de connexion pour un fichier inexistant, j'ai la même erreur.
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Essayez de regarder du coté des droits Windows sur le repertoire ...

    Eventuellement ajouter les droits en lecture/ecriture sur le repertoire souhaite au groupe IIS_IUSRS.

    Après pour le coup ce ne sont que des suppositions, je ne me suis jamais retrouvé dans ce cas.
    MCSA SQL SERVER |MCT | MVP Data Platform

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Il y a déjà des droits "tout le monde / contrôle total".
    Et dans le message d'erreur, c'est bien mon compte qui est indiqué, qui est biensûr celui qui a démarré IIS Express et SQL Server LocalDB.

    Snif.
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    As-tu essayé la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLLOCALDB SHARE "nom_de_l_instance_en_cours" "nom_de_partage"

  9. #9
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Elle est déjà partagée, car si je lance le même code, mais en mode console, j'y accède.
    On ne jouit bien que de ce qu’on partage.

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Je reviens vers vous.

    J'ai refais une série de tests, et j'ai d'autres messages.
    Y'a clairement un truc qui se passe avec IIS.

    Voici mon code :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
                // C'est ultra crade, mais tant pis, ça me gonfle...
                try
                {
                    string[] iniFile = File.ReadAllText(this.Server.MapPath("/system/sys/mmdb.ini")).Split("\n");
                    int nbFound = 0;
                    string str = string.Empty;
                    string cnxString = string.Empty;
                    string tblPrefix = string.Empty;
                    for (int i = 0, cpt = iniFile.Length; i < cpt; i++)
                    {
                        str = iniFile[i];
                        if (str.StartsWith("CONNECTION="))
                        {
                            cnxString = str.Substring(11);
                            nbFound++;
                        }
                        else if (str.StartsWith("TABLE_PREFIX="))
                        {
                            tblPrefix = string.Concat(str.Substring(13), '_');
                            nbFound++;
                        }
                        if (nbFound == 2)
                        {
                            break;
                        }
                    }
                    iniFile = null;
                    str = null;
                    sb.AppendLine(cnxString);
                    using (OdbcConnection cnx = new OdbcConnection(cnxString))
                    {
                        cnx.Open();
     
                        using (OdbcCommand cmd = cnx.CreateCommand())
                        {
                            cmd.CommandText = string.Format("select fi.firma from {0}FI fi where fi.firma like '%ARQUI%'", tblPrefix);
     
                            DataTable dt = new DataTable();
                            OdbcDataAdapter da = new OdbcDataAdapter(cmd);
                            da.Fill(dt);
     
                            foreach (DataRow r in dt.Rows)
                            {
                                sb.Append(";");
                                sb.Append(r["firma"]);
                            }
     
                            dt = null;
                            da.Dispose();
                            cmd.Dispose();
                        }
     
                        cnx.Close();
                    }
                }
                catch (Exception ex)
                {
                    sb.Append(ex.Message);
                }
     
                Label2.Text = sb.ToString();

    La chaîne de connexion extraite est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Driver=SQL Server Native Client 11.0;Server=(LocalDB)\mssqllocaldb;Integrated Security=true;AttachDbFileName=C:\ProgramData\update.crm_webofflinedb\offline.mdf
    Je démarre mon application (pour rappel, un site tournant sous IIS Express avec LocalDB).
    Une fois que le programme tourne, que LocalDB est démarré et la base prête, je lance ce code dans un programme de type "WinForms" (au détail près du this.Server.MapPath("/system/sys/mmdb.ini") que je remplace par le chemin complète en dur vers le fichier ini.
    => Ca fonctionne parfaitement. Je trouve la liste de mes clients contenant le mot "ARQUI" dans le nom.

    Je lance ma page ASPX de test, avec donc le même code, la même chaîne de connexion. Le process IIS Express tourne avec mon user, donc mêmes droits.
    Et je me tape cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ERROR [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]An attempt to attach an auto-named database for file C:\ProgramData\update.crm_webofflinedb\offline.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
    ERROR [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]An attempt to attach an auto-named database for file C:\ProgramData\update.crm_webofflinedb\offline.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
    Si je vire le "AttachDbFileName", je me retrouve dans la base "Master".

    Lorsque je lance alors cette requête select name from sys.databases, j'obtiens dans la liste une base nommée "C:\ProgramData\update.crm_webofflinedb\offline.mdf".

    Je me dis donc "Ok, vu que ma page ASPX a déjà monté en resource globale la base, je ne peux pas l'attacher deux fois. En revanche, je dois pouvoir m'y connecter. Je change donc la chaîne de connexion en "Driver=SQL Server Native Client 11.0;Server=(LocalDB)\mssqllocaldb;Integrated Security=true;Database=C:\ProgramData\update.crm_webofflinedb\offline.mdf".
    Et là c'est le drame : je me retrouve avec l'erreur du premier poste : je ne suis pas autorisé à me connecter à cette base. (Ouverte en mode single user ?).

    Je tourne en rond...
    On ne jouit bien que de ce qu’on partage.

  11. #11
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Bon, je nage en plein délire...

    Je me connecte sans indiquer la base.
    Donc je suis dans master (à priori).

    Et le lance la requête "select fi.firma from [C:\ProgramData\update.crm_webofflinedb\offline.mdf].dbo.OFFLINE_WEB_FI fi where fi.firma like '%ARQUI%'"
    => En indiquand le nom de la base devant le nom de la table.

    Et zou, ça marche !

    Reste plus qu'à tenter de faire un "use" pour espérer simplifier un peu la syntaxe des requêtes...

    Et surtout, renoncer à chercher à comprendre quoi que ce soit !
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/10/2007, 14h40
  2. Connection à une base de données
    Par rodri dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2004, 15h05
  3. Connection à une base de données
    Par rodri dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/07/2004, 13h03
  4. Comment se connecter à une base SQL server
    Par zapia dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/10/2003, 17h39
  5. Réponses: 2
    Dernier message: 26/08/2003, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo