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

VB.NET Discussion :

Probleme requete SqlConnection [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 67
    Par défaut Probleme requete SqlConnection
    Bonjour à tous,

    j'ai installé SQL Server Express.
    J'ai écris du code avec VB.Net pour créer une base de données, ajouter une table,
    ajouter des enregistrements et tout à l'air de fonctionner correctement.
    Mais j'ai quand meme un soucis.
    Pour essayer de comprendre (sans succès), j'ai commençé un nouveau programme avec
    seulement 2 boutons. Un pour ouvrir la base "Test1", et un autre pour la supprimer.
    Si après le lancement du programme je tente de supprimer la base, pas de problème.
    Mais si j'ouvre d'abord la base avec le bouton "BtnOPEN", et qu'ensuite j'essai de
    la supprimer avec le bouton "BtnDROP", j'ai ce message d'erreur :

    "Impossible de supprimer la base de données "Test1" car elle est en cours d'utilisation."

    Pourtant j'ai bien fait ".Dispose" sur l'objet SqlConnection.
    Qu'est c'que j'ai oublié ?

    Code : 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
    Private Sub BtnOPEN_Click(sender As Object, e As EventArgs) Handles BtnOPEN.Click
     
        Dim ObjConnection As SqlConnection
     
        ObjConnection = New SqlConnection("Server=localhost\SQLEXPRESS;User Id=toto;Password=xxxx;Database=Test1;")
     
        Try
            ObjConnection.Open()
            MessageBox.Show("Ouverture Ok")
     
        Catch ex As Exception
            MessageBox.Show(ex.Message)
     
        Finally
            ObjConnection.Close()
            ObjConnection.Dispose()
            ObjConnection = Nothing
     
        End Try
     
    End Sub
    Code : 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
    Private Sub BtnDROP_Click(sender As Object, e As EventArgs) Handles BtnDROP.Click
     
            Dim ObjConnection As SqlConnection
            Dim ObjCMD As SqlCommand
     
            ObjConnection = New SqlConnection("Server=localhost\SQLEXPRESS;User Id=toto;Password=xxxx;")
            ObjConnection.Open()
     
            ObjCMD = ObjConnection.CreateCommand
            ObjCMD.CommandText = "DROP DATABASE IF EXISTS Test1;"
     
            Try
                ObjCMD.ExecuteNonQuery()
                MessageBox.Show("DROP Ok")
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            Finally
                ObjCMD.Dispose()
                ObjCMD = Nothing
                ObjConnection.Close()
                ObjConnection.Dispose()
                ObjConnection = Nothing
     
            End Try
     
        End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 577
    Par défaut
    Bonjour,
    Je pense que la base de données par défaut est Testa.
    Change de base (méthode ChangeDatabase) pour te connecter à master.
    Tu devrais alors pouvoir supprimer ta base Testa.

    Tatayo

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 67
    Par défaut
    @tatayo Merci pour la réponse

    Dans le bouton "BtnDROP", j'ai modifié le code comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            ObjConnection = New SqlConnection("Server=localhost\SQLEXPRESS;User Id=toto;Password=xxxx;Database=master;")
            ObjConnection.Open()
            ObjConnection.ChangeDatabase("master")
     
            ObjCMD = ObjConnection.CreateCommand
            ObjCMD.CommandText = "DROP DATABASE IF EXISTS Test1;"
    mais j'ai toujours le message d'erreur.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 577
    Par défaut
    Il y a une méthode dans la documentation:
    Create/Alter/Drop database.

    Attention à ne pas supprimer la base master

    Tatayo.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 777
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 777
    Par défaut
    Tu ne l'as ouverte dans une autre application par hasard ? un sql management, ou autre ? ou un objet lié à la nase dans tes projets ouverts ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 67
    Par défaut
    Merci pour vos réponses

    je viens d'essayer avec SMO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim ServeurSQL As Microsoft.SqlServer.Management.Smo.Server
     
    ServeurSQL = New Microsoft.SqlServer.Management.Smo.Server("localhost\SQLEXPRESS")
    ServeurSQL.ConnectionContext.LoginSecure = False
    ServeurSQL.ConnectionContext.Login = "xxxx"
    ServeurSQL.ConnectionContext.Password = "xxxx"
     
    ServeurSQL.Databases("Test1").Drop()
    si j'utilise pas avant le bouton "BtnOPEN", ça fonctionne, la base est bien détruite.
    Mais si j'ouvre d'abord la base avc le bouton "BtnOPEN", cette fois-ci j'ai droit à
    2 exceptions :

    "Drop failed for Database 'Test1'"
    et
    "Impossible de supprimer la base de données "Test1" car elle est en cours d'utilisation."

    Aucun autre programme tournant utilisant la base.
    J'ai juste installé SQL Server Express et j'ai commencé à programmer avec une nouvelle
    application .NET Framework 4.8

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 67
    Par défaut
    J'ai ajouté ce code pour voir la liste des connexions sur la base "Test1" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Dim ObjReader As SqlDataReader
            Dim s As String
            ObjCMD.CommandText = "SELECT DB_NAME(dbid) as DBName, loginame as LoginName, program_name, status FROM sys.sysprocesses WHERE DB_NAME(dbid) = 'Test1' AND spid != @@SPID;"
            ObjReader = ObjCMD.ExecuteReader()
            While ObjReader.Read()
                s = ObjReader("DBName")
                s = ObjReader("LoginName")
                s = ObjReader("program_name")
                s = ObjReader("status")
            End While
    sans appuyer sur "BtnOPEN", la liste est vide.
    Mais après avoir sollicité "BtnOPEN", j'obtiens :

    Test1
    Phil
    .Net SqlClient Data Provider
    sleeping

    Dans "BtnDROP", avant d'ouvrir la connexion avec ".Open()", j'ai ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlConnection.ClearAllPools()
    le nombre de connexions est revenu à zéro, et j'ai pu supprimer la base,
    sans message d'erreur.
    Je pense qu'il me faut passer du temps à essayer de comprendre le fonctionnement de
    ce que Microsoft appele le "Pooling de connexions" dans SQL Server.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 67
    Par défaut
    Je vais clore le sujet puisque manifestement c'était le Pool de connexions le "soucis".
    Ce Pool qui semble t-il accélère les connections.
    J'ai lu qu'on pouvait le désactiver dans la chaine de connexion :

    Mais ce systeme me laisse perplexe.
    Qu'il garde une liste des connections précédentes ok, mais il garde aussi le lien
    sur la derniere base de données ouverte. ça doit poser des problemes non ?
    Dans mon BtnDROP, j'ai supprimé l'appel à la méthode ".ClearAllPools()"
    Dans mon BtnOPEN, avant de fermer la base j'ai ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .ChangeDatabase("master")
    Plus de message d'erreur lors de la suppression de la base de données avec DROP.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 656
    Par défaut
    Désolé pour le manque de réactivité.

    Le pooling de connexion à la base est un truc vieux comme .NET2.
    C'est un mécanisme qui a(vait) pour but de réduire la latence et le temps de connexion, surtout dans les applications Web.

    Happy Programming.

  10. #10
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 67
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Désolé pour le manque de réactivité.

    Le pooling de connexion à la base est un truc vieux comme .NET2.
    C'est un mécanisme qui a(vait) pour but de réduire la latence et le temps de connexion, surtout dans les applications Web.

    Happy Programming.
    Merci pour la précision

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur3073 Problème requête
    Par amel123456789 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/04/2004, 10h15
  2. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07
  3. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  4. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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