2010-04-12 3 views
1

J'ai une application de formulaire C# qui utilise une base de données d'accès.Aucune valeur donnée pour un ou plusieurs paramètres requis lors de l'initialisation de la connexion

Cette application fonctionne parfaitement dans le débogage et la libération. Cela fonctionne sur toutes les versions de Windows. Mais planter sur un ordinateur avec Windows 7.

Le message que je suis arrivé est:

System.Data.OleDb.OleDbException: No value given for one or more required parameters.

EDIT, après un certain débogage avec messagebox sur l'ordinateur qui a le problème, est le code ici que bug.L'erreur est interceptée sur cmd.ExecuteReader(). La boîte de message juste avant est affichée et la suivante est celle dans la capture avec l'exception ci-dessous. Des idées? Je pense que c'est quelque chose lié à la chaîne de connexion mais pourquoi seulement sur cet ordinateur.

Merci pour votre aide!

EDIT

Voici le message d'erreur complète:

Voir la fin de ce message pour plus de détails sur l'appel

juste à temps (JIT) à la place de cette boite de dialogue.

************** Exception texte **************

System.Data.OleDb.OleDbException: Aucune valeur donnée pour un ou plusieurs paramètres requis.

à System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr)

à System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, objet & ExecuteResult)

à System.Data.OleDb .OleDbCommand.ExecuteCommandText (Object & ExecuteResult)

à System.Data.OleDb.OleDbCommand.ExecuteCommand (comportement CommandBehavior, objet & ExecuteResult)

à System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (Comportement CommandBehavior, méthode String)

à System.Data.OleDb.OleDbCommand.ExecuteReader (comportement CommandBehavior)

à System.Data.OleDb.OleDbCommand .ExecuteReader()

à DatabaseLayer.DatabaseFacade.GetModeleCoeff()

à DatabaseLayer.DatabaseFacade.InitConnection (String strFile)

chez CalculatriceCHW.ListeMesure.OuvrirFichier (String strFichier)

à CalculatriceCHW.ListeMesure.nouveauFichierMenu_Click (sender Object, EventArgs e)

à System.Windows.Forms.ToolStripItem.RaiseEvent (Object key, EventArgs e)

au système. Windows.Forms.ToolStripMenuItem.OnClick (EventArgs e)

à System.Windows.Forms.ToolStripItem.HandleClick (EventArgs e)

à System.Windows.Forms.ToolStripItem.HandleMouseUp (MouseEventArgs e)

à System.Windows.Forms.ToolStripItem.FireEventInteractive (EventArgs e, ToolStripItemEventType rencontré)

à System.Windows.Forms.ToolStripItem.FireEvent (EventArgs e, ToolStripItemEventType remplies)

à System.Windows .Forms.ToolStrip.OnMouseUp (MouseEventArgs mea)

à System.Windows.Forms.ToolStripDropDown.OnMouseUp (MouseEventArgs mea)

à System.Windows.Forms.Control.WmMouseUp (message & m, bouton MouseButtons, Int32 clique)

à System.Windows.Forms.Control.WndProc (message & m)

à System.Windows.Forms.ScrollableControl.WndProc (message & m)

à System.Windows.Forms.ToolStrip.WndProc (message & m)

à System.Windows.Forms.ToolStripDropDown.WndProc (message & m)

à System.Windows.Forms.Control.ControlNativeWindow.OnMessage (message & m)

à System.Windows.Forms.Control.ControlNativeWindow.WndProc (message & m)

à System.Windows.Forms. NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

+1

Une chance c'est Windows 7 x64 bits? –

+0

Comment la valeur de strFile est-elle transmise à InitConnection (ou dans le cas d'un ordinateur - NE PAS être passé dans la fonction)? – ktharsis

+0

Darin: Non c'est x86 ktharsis: Je ne connais pas la valeur car ce n'est pas dans le débogage, c'est une version installée. Si les choses ci-dessus et ci-dessous ne fonctionnent pas, je vais mettre une boîte de message ou un fichier journal afin que je puisse voir le problème. Remerciements –

Répondre

0

Ok, voici ce qui s'est passé.

La base de données a manqué la colonne 2 dans un tableau. La raison? Eh bien, dans l'application, lorsque l'utilisateur clique sur "Nouveau", une copie du fichier .mdb dans le dossier de l'application est faite à l'emplacement du choix de l'utilisateur. La base de données "model" est ok, toutes les colonnes sont là, mais le fichier copié manquait 2 colonnes. J'ai donc fait un peu de recherche, a constaté que l'application utilisait le magasin virtuel de Windows 7 au lieu du répertoire du fichier programme. Pourquoi? Nous pensons que l'utilisateur a enregistré le fichier directement dans le répertoire du fichier du programme (ce qui provoque une copie dans le magasin virtuel) avec l'ancienne version de l'application (et de la base de données). À ce moment, le magasin virtuel était utilisé en priorité dans le fichier programme et tout ne fonctionnait pas.

Alors merci pour votre aide, cela m'aidera à trouver le problème!

2

Vous n'échappez pas au chemin du fichier.

Vous devriez utiliser un OleDbConnectionStringBuilder, qui permettra d'éviter correctement les chemins avec des caractères spéciaux, et résoudra probablement votre problème.

Par exemple:

OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(); 
builder.Provider = "Microsoft.Jet.OLEDB.4.0"; 
builder.DataSource = strFile; 
builder["User Id"] = "admin"; 
+0

Je viens de l'essayer, ça ne marche pas, même erreur. merci –

0

Il pourrait payer pour ajouter ce chèque au début de votre méthode, juste pour le rendre plus facile à dire quand cette méthode n'est pas appelé correctement. Je ne sais pas si c'est le problème que vous avez, mais cela pourrait exclure un bug possible.

 if (string.IsNullOrEmpty(strFile)) 
     { 
      throw new ArgumentNullException("strFile", "strFile must be set"); 
     } 
+0

Je viens de l'essayer, même erreur. Merci! –

0

Peut-être que vous manquez de catalogue initial, c'est-à-dire que vous souhaitez vous connecter à DataBase.

Catalogue initial = YourDBName

+0

J'ai vérifié sur connectionstrings.com et il n'y a pas besoin de catalogue initial sur une base de données d'accès car il n'y a qu'une base de données dans le fichier. Merci quand même :) –

Questions connexes