Connexion multiple sur base sql server

cazadeis2 Messages postés 5 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 30 juin 2010 - 25 mai 2010 à 18:15
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 5 juin 2010 à 18:56
Bonjour,

Voici un problème que je n'arrive pas à résoudre. J'ai 2 ordis en réseau dont un fait office de serveur et collecte diverses données dans une base tournant sous le dernier SQL server 2008 express.
J'ai une première application développée en VB.Net qui est chargée de collecter et enregistrer les données dans la BDD.
Une deuxième application sur un autre ordinateur exploite ces données et interroge la base.
Tout fonctionne à la seule condition que seule une des 2 applications soit ouverte, sinon j'obtiens une exception m'indiquant que le fichier data.mdf est utlisé par un autre processus :

L'exception System.Data.OleDb.OleDbException n'a pas été gérée
  ErrorCode=-2147467259
  Message=Impossible d'ouvrir le fichier physique "C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Data.mdf". Erreur du système d'exploitation 32 : "32(Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus.)".
  Source=Microsoft OLE DB Provider for SQL Server
  StackTrace:
       à System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
       à System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
       à System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
       à System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       à System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       à System.Data.OleDb.OleDbConnection.Open()
       à WindowsApplication1.Form1.Button1_Click(Object sender, EventArgs e) dans C:\Users\Helene\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb:ligne 8
       à System.Windows.Forms.Control.OnClick(EventArgs e)
       à System.Windows.Forms.Button.OnClick(EventArgs e)
       à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       à System.Windows.Forms.Control.WndProc(Message& m)
       à System.Windows.Forms.ButtonBase.WndProc(Message& m)
       à System.Windows.Forms.Button.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.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       à 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(ApplicationContext context)
       à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       à WindowsApplication1.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81
       à System.AppDomain._nExecuteAssembly(RuntimeAssembly 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, Boolean ignoreSyncCtx)
       à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       à System.Threading.ThreadHelper.ThreadStart()
  InnerException: 



Merci de votre aide.

4 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
25 mai 2010 à 23:03
Utilise l'espce de nom "System.Data.SqlClient" !

Ce que fait OleDB c'est ouvrir ta base mdf comme un simple fichier excell, dès qu'il est ouvert par ta première application, la seconde ne peut accéder au fichier et ce qui est normale car ton application ne respecte pas le schéma Client/Serveur.

PC CLIENTS PC SERVEUR
Application1 =======> MDF
Application2 =======> XXX (Erreur base déja ouverte)

SqlClient quant à lui, se connecte au serveur MS Sql en précisant la base à consulter, et non directement à la base, ce qui permet une connexion multiple.

PC CLIENTS PC SERVEUR
Application1 <=======> Serveur MS Sql <===========> MDF
Application2 <=======>
Application3...

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cazadeis2 Messages postés 5 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 30 juin 2010
28 mai 2010 à 07:46
Ca fonctionne, merci beaucoup pour cette aide précieuse.
0
cs_khaireddine Messages postés 2 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 5 juin 2010
5 juin 2010 à 13:16
[^^sad1]
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
5 juin 2010 à 18:56
un voila un message interressant !
je parle pas pour toi khaireddine bien sûr
0
Rejoignez-nous