2010-05-31 9 views
1

Je travaille sur une application de bureau winforms qui doit stocker des données. J'ai pris la très mauvaise décision d'essayer d'intégrer une base de données. J'ai essayé:Toutes les bases de données incorporées ne parviennent pas à ouvrir les connexions

  • SQLite
  • VistaDB
  • SQL Server Compact

Dans tous les cas, j'ai pu générer un modèle Entity Framework sur le schéma de base que je l'ai créé. J'ai un événement qui ajoute des données que j'ai utilisées pour tester ces bases de données. Eh bien, j'ai continué à ajouter un nouvel enregistrement en utilisant EF et je n'ai pas trouvé d'enregistrement. En débogage, j'ai vérifié l'objet de contexte pour voir ce qui se passait. Il s'avère qu'il est dit "le fournisseur sous-jacent n'a pas ouvert", ou quelque chose à cet effet. Il ne lançait pas d'exception, mais n'insérait pas d'enregistrement. La même chose s'est produite pour les 3 bases de données embarquées - ce qui m'a incité à comprendre à travers ma tête dense qu'il doit y avoir quelque chose qui ne va pas dans ma configuration.

Eh bien, j'ai essayé d'écrire un sql de base en utilisant une sqlconnection et une sqlcommand. Cette fois, il jette une exception. Dans le cas SQL Server Compact, il est désormais indiqué:

Une erreur liée au réseau ou à une instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou inaccessible. Vérifiez que le nom d'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (fournisseur: SQL Network Interfaces, erreur: 26 - Erreur de localisation du serveur/de l'instance spécifiée)

Je pensais que le chemin de l'app.Config était peut-être un problème. Alors j'ai changé la chaîne de connexion:

Notez que j'ai simplifié le chemin loin de tout ce qui pourrait avoir des espaces et a évité d'utiliser le non-sens répertoire de données qui provoque problème lorsque le répertoire de débogage ne correspond pas à la valeur préconfigurée pour le répertoire de données. Je cours Windows 7; Je pensais que c'était peut-être un problème d'accès - alors j'ai essayé de lancer VS 2010 en mode Administrateur. Pas de chance. J'ai également installé Sql Server Compact SP2, pensant que cela pourrait être un bug. Pas de chance.

De toute façon, je suis prêt à tirer mes cheveux. Je suis sur une échéance serrée pour cette chose et ne m'attendais pas à passer la journée à essayer de comprendre ce qui se passe.

+0

en l'état, je doute que quelqu'un puisse répondre à votre question. Besoin de plus de détails –

+0

Désolé, pour une raison quelconque, le code n'est pas venu à travers. Voici la chaîne de connexion: rsteckly

+0

J'ai réussi à utiliser VistaDB 4 et 5 avec EF Code-first, mais j'ai également occasionnellement (dans VistaDB 5 cas) obtenir ce "fournisseur de sous-couche n'a pas réussi à ouvrir". Vista DB prend en charge plus de choses (y compris les écritures simultanées!) Que SQL Compact ou SQLite – Prokurors

Répondre

1

Utilisez SqlCeConnection

+0

Bon, cela l'a corrigé - au moins quand il s'agit d'utiliser SqlConnection et SQLCommands. Qu'en est-il de l'Entity Framework? Est-il possible d'utiliser SQL Server Compact avec l'EF? – rsteckly

+0

Hmm, je ne l'ai pas utilisé. Vous pouvez vérifier les limitations sur SQL Server Compact 3.5 Service Pack 1 Documentation en ligne, Entity Framework (SQL Server Compact) http://technet.microsoft.com/fr-fr/library/cc835494%28SQL.100%29.aspx – volody

+0

Ainsi, il prend en charge EF. Cependant, il y a une limitation que j'ai remarquée immédiatement. SQL Server Compact 3.5 SP1 ne prend pas en charge les clés primaires auto-incrémentées lors de l'utilisation de l'EF. Vous devez incrémenter les clés vous-même. J'ai utilisé une méthode d'extension que j'ai trouvée pour obtenir l'identifiant le plus récent et incrémenter le numéro. Cependant, je devais toujours attribuer manuellement la valeur à chaque fois. – rsteckly

Questions connexes