2010-09-13 5 views
5

J'ai une base de données (serveur sql compact) dans un fichier * .sdf. J'ai converti un projet de structure compacte en un projet PC normal et, pour une raison quelconque, avec le même code et le même fichier * .sdf, l'exception suivante a été levée: "le nom du fichier n'est pas valide. la base de données "Problème de chaîne de connexion sql

la chose étrange est que sur mon PC - la sous-chaîne" fichier: \ "a été ajoutée à ma chaîne de connexion d'origine et c'est probablement pourquoi l'exception est levée. lorsque je supprime la sous-chaîne "file: \" en mode débogage, à l'exécution, l'exception n'est pas levée.

Pourquoi cette sous-chaîne a-t-elle été ajoutée? d'où est ce que ça vient? et comment puis-je résoudre ce problème?

récemment, j'ai découvert qu'il peut y avoir une certaine connexion au fait que le fichier app.config est manquant. Cela n'explique toujours pas comment la chaîne de connexion d'origine existe, uniquement avec sa sous-chaîne ajoutée.

Aidez-nous s'il vous plaît. merci d'avance

+0

Le fichier sdf est-il local? Dans un sous-dossier? Où est-ce? Pouvez-vous donner un exemple de ce à quoi ressemble votre chaîne de connexion? – curtisk

+0

Oui, c'est local. Il se trouve dans "C: \ solutionname \ nomprojet \ bin \ debug \ sdfname.sdf" la chaîne de connexion: "fichier: \\ C: \\ solutionname \\ nomprojet \\ bin \\ debug \\ sdfname.sdf " – George

Répondre

0

Étant donné que Windows CE ne possède pas de «répertoire en cours», les implémentations obtiennent généralement l'emplacement de l'assembly en cours d'exécution comme répertoire. Sur un bureau, la chaîne renvoyée par Assembly.GetExecutingAssembly().GetName().CodeBase inclut ce préfixe de schéma .

+0

qu'est ce que Assembly.GetexecutingAssembly(). GetName(). CodeBase? et comment puis-je résoudre ce problème? – George

+0

Si vous entrez "sdfname.sdf", le processus ouvrant ce fichier devra le résoudre, par exemple, "c: \ somefolder \ sdfname.sdf". Sur les machines Windows, les développeurs supposent généralement que le fichier se trouve dans le dossier en cours, mais comme Windows CE n'a pas de «dossier courant», les développeurs CE utilisent généralement le chemin de l'assemblage. –

+0

Sous Windows CE, cette fonction renvoie un chemin que vous pouvez utiliser non modifié pour ouvrir un fichier, tandis qu'un préfixe de schéma (fichier: \\\) est ajouté sur le framework complet. Je ne sais pas où cette conversion de relative à absolue se produit, si c'est dans une bibliothèque tierce partie, vous pouvez voir si elles ont une version complète du cadre, vous pouvez utiliser à la place de la version CF? –

1

Je ne vois pas pourquoi vous auriez besoin de "file: //". Cela devrait fonctionner sans cela. Pour sûr, il semble que vous avez faux fichier: \ au lieu de fichier: //

+0

peut-être que je ne me suis pas expliqué correctement .. le "fichier: \" préfixe a été ajouté automatiquement par lui-même - Je ne l'ai pas ajouté. C'est pourquoi l'exception est levée (pas par moi, par le cadre). Je ne sais pas pourquoi cela arrive. Je souhaiterais trouver l'origine de ce préfixe et comprendre pourquoi cela se produit, mais pour le moment je serais même en train de seller pour le supprimer directement en cours d'exécution avant d'appeler la fonction qui lance l'exception. Malheureusement, la chaîne de connexion est privée et à cause de cela - je n'y ai pas accès. – George

+0

Vous l'avez fait comprendre, je ne l'ai pas lu correctement. Votre chaîne de connexion doit être: "Data Source = c: \ db.sdf". – Bryan