none
SQL Server probleme de connexion RRS feed

  • Question

  • bonsoir,

    ok merci du tuyau.

    j'ai un problème.A chaque fois que j'exécute mon application,ma base de données se ferme.je ne sais pas à quoi c'est du .

    Aidez moi!?

    Cordialement

    • Fractionné Alex Petrescu mardi 21 septembre 2010 09:17 sql server
    mercredi 15 septembre 2010 15:20

Réponses

  • Bonjour,

    Je suppose que votre base a été créée avec Visual Studio Express et que pour vous connecter à la base, vous avez utilisé les outils fournis avec VS. Sinon pourquoi auriez-vous dans votre chaine de connexion "User Instance=true" ?

    Les "user instances" ( ou instances nommées" ) constituent une nouveauté apparue avec SQL Server 2005 ( et surtout SQL Server Express ) qui est très interessante , très utile ( permet des développements très rapides et un déploiement  très simple puique intégrant la base ). Le "big problème" est que les principaux utilisateurs ( et dèveloppeurs ) sont des amateurs ou des débutants qui ne voient pas que les instances nommées constituent un sujet très,très complexe ( en plus, dans de nombreux livres , on "oublie" de parler de ces problèmes ). J'ai mis presque 5 ans pour commencer à maîtriser ce sujet qui malheureusement va devenir caduc puisque les instances nommées ont été dépréciées avec SQL Server 2008 ( version 10 ), cette disparition aura lieu au plus tard avec la version 12 de SQL Server version 12 ( et peut-être même avant ) suivant les gros bruits de couloir en provenance de la SQL Server Express Team.

    Les instances nommées, pour moi, c'est très utile et très simple à utiliser quand on a accepté de passer 5 heures par jour pendant 1 an.

    Seulement, je crains fort que le vrai responsable de la disparition proche des "user instances" soit en réalité l'équipe de dèveloppement de VS. Pourquoi n'offrir que 3 possibilités pour créer une source de données

    SQL Server Compact

    Access

    et fichier de base de données SQL Server .

    Je viens d'essayer avec VB 2010 Express et une base (AdventureWorksLT2008) appartenant à une instance SQL Server Dev 2008. J'ai un beau message me disant que le fichier est utilisé par un autre processus. Si dans les propriétés avancées, je change user instance de true à false, j'ai le message "Il existe un fichier de même nom...".Comportement que je crains de devoir qualifier d'abbérant ou au mieux d'amateur ( même chose avec mon VS Standard 2008 sauf que celà marche enfin quand je force user instance = false ).Pourquoi ne pas offrir la possiblité supplémentaire base de données SQL Server en s'appuyant sur le nom de l'instance et de la base ?

    Heureusement que sur le SQL Server Express Forum (us), il y a eu pendant 5 ans des gens comme Mike Wachal pour accepter de répondre  avec calme et tact aux 6 à 10 posteurs journaliers posant les mêmes questions ( présentées différemment ) avec la même réponse "user instance = true". De toute façon, il me semble évident que l'équipe de développement de VS va devoir très vite revoir sa copie puisque cette particularité de SQL Server Express va disparaitre.

    Surout que les instances nommées entraînent de nombreux problèmes

    - connexions obligatoirement avec authentification Windows

    - connexions locales seulement

    - non supportées par les éditions de SQL Server autres que Express ( si l'on doit passer à une Edition Standard, il faudra réécrire une bonne partie de l'application )

    - les sauvegardes et restaurations sont possibles mais pas très simples ( Voir les articles de Mike Wachal sur http://blogs.msdn.com/b/sqlexpress/default.aspx?PageIndex=1 )

    - il est impossible d'accéder à une instance nommée depuis 2 applications différentes en même temps

    En anglais, les instances nommées sont aussi appelées RANU 

    Voici quelques liens qui pourraient vous être utiles :

    http://blogs.msdn.com/b/sqlexpress/archive/2009/07/08/embedding-sql-server-2008-express-in-an-application-technical-article.aspx

    http://blogs.msdn.com/b/sqlexpress/archive/2008/02/22/sql-server-express-and-hosting.aspx

    http://blogs.msdn.com/b/sqlexpress/archive/2007/03/20/backup-and-restore-with-user-instances.aspx

    http://blogs.msdn.com/b/sqlexpress/archive/2006/11/22/connecting-to-sql-express-user-instances-in-management-studio.aspx

    http://blogs.msdn.com/b/sqlexpress/archive/2005/11/28/embedding-sql-express-with-your-application.aspx

    Tous en anglais, tous écrits par Mike ( très simples et clairs )

    Connaissant les problèmes liés aux instances nommées, j'ai très vite préféré passer à une utilisation plus "classique" de SQL Server Express , comme une édition normale avec quelques limites : pas de SQL Agent,pas de SQL Server Profiler,taille de l'ensemble des fichiers data d'une base limitée à 4 GO sauf pour SQL Server 2008 R2 Express 10 GO,... ). J'écris plus de code mais c'est ce qui m'a permis d'apprendre beaucoup sur le nom d'espace System.Data.SqlClient que je commence à bien maîtriser . J'ai arrété depuis longtemps d'utiliser de simples recettes en programmation , en réalité, je pars d'elles et je cherche surtout à comprendre comment ça marche ( ce qui m'a souvent éviter des erreurs de programmation , je considère cette démarche comme étant très bénéfique en fin de compte )

    Je vais essayer de retrouver quelque chose concernant SQL Server 2005 ( au fait quel Service Pack ?, c'est important car un certain nombre de problèmes ont été corrigés avec le SP2 et SP3 , je crois que le dernier SP pour SQL Server 2005 arrivre dans quelques semaines )

    Bonne journée

     


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.
    • Marqué comme réponse Alex Petrescu vendredi 24 septembre 2010 08:03
    lundi 20 septembre 2010 17:41

Toutes les réponses

  • Bonjour,

    Que voulez vous dire par : "ma base de données se ferme" ?

    Merci de poser une question par sujet de discussion !

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 15 septembre 2010 18:25
    Modérateur
  • Bonjour,

    Voici le problème que j'ai :

    L'exception System.Data.SqlClient.SqlException n'a pas été gérée
      Class=20
      ErrorCode=-2146232060
      LineNumber=0
      Message="Une erreur s'est produite lors de l'établissement d'une connexion au serveur. Lors de la connexion à SQL Server 2005, cet échec peut être dû au fait que les paramètres par défaut de SQL Server n'autorisent pas les connexions à distance. (provider: Fournisseur de canaux nommés, error: 40 - Impossible d'ouvrir une connexion à SQL Server)"
      Number=53
      Server=""
      Source=".Net SqlClient Data Provider"
      State=0
      StackTrace:
           à System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
           à System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
           à System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
           à System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
           à System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
           à System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
           à System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
           à System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
           à System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
           à System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
           à System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
           à System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
           à System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
           à System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
           à System.Data.SqlClient.SqlConnection.Open()
           à GestionClinique.Form1.Form1_Load(Object sender, EventArgs e) dans C:\GestionClinique\GestionClinique\Form1.vb:ligne 63
           à System.Windows.Forms.Form.OnLoad(EventArgs e)
           à System.Windows.Forms.Form.OnCreateControl()
           à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
           à System.Windows.Forms.Control.CreateControl()
           à System.Windows.Forms.Control.WmShowWindow(Message& m)
           à System.Windows.Forms.Control.WndProc(Message& m)
           à System.Windows.Forms.ScrollableControl.WndProc(Message& m)
           à System.Windows.Forms.ContainerControl.WndProc(Message& m)
           à System.Windows.Forms.Form.WmShowWindow(Message& m)
           à System.Windows.Forms.Form.WndProc(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           à System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
           à System.Windows.Forms.Control.SetVisibleCore(Boolean value)
           à System.Windows.Forms.Form.SetVisibleCore(Boolean value)
           à System.Windows.Forms.Control.set_Visible(Boolean value)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.Run(Form mainForm)
           à GestionClinique.Form1.Main() dans C:\GestionClinique\GestionClinique\Form1.Designer.vb:ligne 2
           à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           à System.Threading.ThreadHelper.ThreadStart()

    Cordialement

     

    jeudi 16 septembre 2010 08:38
  • Bonjour,

     

    Est-il possible de nous donner le code que vous utilisez pour faire la connexion avec la base de données et la ligne de code qui produit cette erreur ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    • Proposé comme réponse EhJoe lundi 20 septembre 2010 10:41
    jeudi 16 septembre 2010 13:22
  • Bonjour,

    S'il vous plait, pourriez-vous nous dire comment vous avez créé votre base de données ( par programme, avec SQL Server Management Studio... ) et nous fournir vôtre chaine de connexion ( celle utilisée par la méthode SQL Connection ) ?

    Est-ce que vous utilisez une base créée sur l'ordinateur ( base locale ) ou sur un autre ordinateur ?

    Bonne journée

    PS : vous trouverez peut-être vôtre chaine de connexion dans le fichier App.Config


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.
    • Proposé comme réponse EhJoe lundi 20 septembre 2010 10:41
    jeudi 16 septembre 2010 16:10
  • Bonjour,

    Oui la base es t local.il s'agit de la base de données interne à VS2005.

    j'ai repris ma connexion avec ceci et il marche :

                    Data Source=.\SQLEXPRESS;AttachDbFilename=C:\GestionClinique\GestionClinique\DatabaseGestionClinique.mdf;Integrated Security=True;User Instance=true") 'Définition de la connexion

     

    Cordialement

    lundi 20 septembre 2010 11:18
  • Bonjour,

    Je suppose que votre base a été créée avec Visual Studio Express et que pour vous connecter à la base, vous avez utilisé les outils fournis avec VS. Sinon pourquoi auriez-vous dans votre chaine de connexion "User Instance=true" ?

    Les "user instances" ( ou instances nommées" ) constituent une nouveauté apparue avec SQL Server 2005 ( et surtout SQL Server Express ) qui est très interessante , très utile ( permet des développements très rapides et un déploiement  très simple puique intégrant la base ). Le "big problème" est que les principaux utilisateurs ( et dèveloppeurs ) sont des amateurs ou des débutants qui ne voient pas que les instances nommées constituent un sujet très,très complexe ( en plus, dans de nombreux livres , on "oublie" de parler de ces problèmes ). J'ai mis presque 5 ans pour commencer à maîtriser ce sujet qui malheureusement va devenir caduc puisque les instances nommées ont été dépréciées avec SQL Server 2008 ( version 10 ), cette disparition aura lieu au plus tard avec la version 12 de SQL Server version 12 ( et peut-être même avant ) suivant les gros bruits de couloir en provenance de la SQL Server Express Team.

    Les instances nommées, pour moi, c'est très utile et très simple à utiliser quand on a accepté de passer 5 heures par jour pendant 1 an.

    Seulement, je crains fort que le vrai responsable de la disparition proche des "user instances" soit en réalité l'équipe de dèveloppement de VS. Pourquoi n'offrir que 3 possibilités pour créer une source de données

    SQL Server Compact

    Access

    et fichier de base de données SQL Server .

    Je viens d'essayer avec VB 2010 Express et une base (AdventureWorksLT2008) appartenant à une instance SQL Server Dev 2008. J'ai un beau message me disant que le fichier est utilisé par un autre processus. Si dans les propriétés avancées, je change user instance de true à false, j'ai le message "Il existe un fichier de même nom...".Comportement que je crains de devoir qualifier d'abbérant ou au mieux d'amateur ( même chose avec mon VS Standard 2008 sauf que celà marche enfin quand je force user instance = false ).Pourquoi ne pas offrir la possiblité supplémentaire base de données SQL Server en s'appuyant sur le nom de l'instance et de la base ?

    Heureusement que sur le SQL Server Express Forum (us), il y a eu pendant 5 ans des gens comme Mike Wachal pour accepter de répondre  avec calme et tact aux 6 à 10 posteurs journaliers posant les mêmes questions ( présentées différemment ) avec la même réponse "user instance = true". De toute façon, il me semble évident que l'équipe de développement de VS va devoir très vite revoir sa copie puisque cette particularité de SQL Server Express va disparaitre.

    Surout que les instances nommées entraînent de nombreux problèmes

    - connexions obligatoirement avec authentification Windows

    - connexions locales seulement

    - non supportées par les éditions de SQL Server autres que Express ( si l'on doit passer à une Edition Standard, il faudra réécrire une bonne partie de l'application )

    - les sauvegardes et restaurations sont possibles mais pas très simples ( Voir les articles de Mike Wachal sur http://blogs.msdn.com/b/sqlexpress/default.aspx?PageIndex=1 )

    - il est impossible d'accéder à une instance nommée depuis 2 applications différentes en même temps

    En anglais, les instances nommées sont aussi appelées RANU 

    Voici quelques liens qui pourraient vous être utiles :

    http://blogs.msdn.com/b/sqlexpress/archive/2009/07/08/embedding-sql-server-2008-express-in-an-application-technical-article.aspx

    http://blogs.msdn.com/b/sqlexpress/archive/2008/02/22/sql-server-express-and-hosting.aspx

    http://blogs.msdn.com/b/sqlexpress/archive/2007/03/20/backup-and-restore-with-user-instances.aspx

    http://blogs.msdn.com/b/sqlexpress/archive/2006/11/22/connecting-to-sql-express-user-instances-in-management-studio.aspx

    http://blogs.msdn.com/b/sqlexpress/archive/2005/11/28/embedding-sql-express-with-your-application.aspx

    Tous en anglais, tous écrits par Mike ( très simples et clairs )

    Connaissant les problèmes liés aux instances nommées, j'ai très vite préféré passer à une utilisation plus "classique" de SQL Server Express , comme une édition normale avec quelques limites : pas de SQL Agent,pas de SQL Server Profiler,taille de l'ensemble des fichiers data d'une base limitée à 4 GO sauf pour SQL Server 2008 R2 Express 10 GO,... ). J'écris plus de code mais c'est ce qui m'a permis d'apprendre beaucoup sur le nom d'espace System.Data.SqlClient que je commence à bien maîtriser . J'ai arrété depuis longtemps d'utiliser de simples recettes en programmation , en réalité, je pars d'elles et je cherche surtout à comprendre comment ça marche ( ce qui m'a souvent éviter des erreurs de programmation , je considère cette démarche comme étant très bénéfique en fin de compte )

    Je vais essayer de retrouver quelque chose concernant SQL Server 2005 ( au fait quel Service Pack ?, c'est important car un certain nombre de problèmes ont été corrigés avec le SP2 et SP3 , je crois que le dernier SP pour SQL Server 2005 arrivre dans quelques semaines )

    Bonne journée

     


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.
    • Marqué comme réponse Alex Petrescu vendredi 24 septembre 2010 08:03
    lundi 20 septembre 2010 17:41
  • Bonjour,

     

    Papy Normand, je vous remercie pour ce commentaire très instructif.

    Edson80, si les liens fournis par Papy Normand ne sont pas suffisantes, je vous remercie de revenir avec d’autres informations sur cette erreur.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    mercredi 22 septembre 2010 13:28