J'utilise Visual Studio 2017 et SQL Server 2014. Lorsque j'attache un fichier de base de données à Visual Studio, le message d'erreur suivant s'affiche:
Après la mise à niveau du fichier, j'ai utilisé cette chaîne de connexion.
<connectionStrings>
<add name="con"
connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\binaaelmamorra.mdf;Integrated Security=True;Connect Timeout=30"/>
</connectionStrings>
Cela fonctionne bien sur ma machine, mais sur la machine cliente, une erreur s’affiche:
Impossible d'ouvrir car il s'agit de la version 852. Ce serveur prend en charge les versions 782 et antérieures.
Bien que j'aie installé la base de données locale SQL Server 2016 côté client, je ne parviens toujours pas à m'en débarrasser.
Ma deuxième question est la suivante: quelle est l'instance actuelle de SQL Server avec laquelle le fichier de base de données n'est pas compatible?
Il semble que vous ayez plusieurs instances de différentes versions de SQL Server sur votre ordinateur.
Pour les versions "complètes" (Express et versions ultérieures), vous pouvez vérifier leur version en consultant le Gestionnaire de configuration SQL Server:
Pour les versions "LocalDB" de SQL Server (versions orientées développeur), vous pouvez utiliser l'outil de ligne de commande sqllocaldb
.
Obtenez un aperçu de ce que vous avez sur votre machine en utilisant cette commande:
C:\> sqllocaldb i
MSSQLLocalDB
v11.0
Ensuite, vous pouvez vérifier les instances individuelles à l’aide de la commande details:
C:\> sqllocaldb i mssqllocaldb
Name: mssqllocaldb
Version: 13.1.4206.0
Shared name:
Owner: MSE-PC-02\Marc
Auto-create: Yes
State: Stopped
Last start time: 27.08.2017 12:24:45
Instance pipe name:
C:\> sqllocaldb i v11.0
Name: v11.0
Version: 11.0.3000.0
Shared name:
Owner: MSE-PC-02\Marc
Auto-create: Yes
State: Stopped
Last start time: 26.08.2017 15:41:18
Instance pipe name:
Donc, cela vous indique qu'il existe deux instances de SQL Server LocalDB disponibles - mssqllocaldb
est la version 13.1 (SQL Server 2016), tandis que v11.0
instance est la version 11.0 (SQL Server 2012).
Donc, si vous voulez joindre un .mdf
fichier dans l’une de ces deux instances, il vous suffit de choisir le bon pour le faire fonctionner avec la version de votre choix. Et une fois que vous avez "mis à niveau" un fichier de base de données vers une version plus récente de SQL Server (telle que 2016 - version interne de la base de données 852), vous pouvez NE JAMAIS revenir - Il n'y a aucun moyen de détacher/attacher, de sauvegarder/restaurer ou d'autres moyens d'obtenir ces fichiers binaires vers une version plus ancienne de SQL Server. Vous devez scripter la structure (et éventuellement les données) de votre nouveau fichier de base de données sur .sql
fichiers et exécutez ceux de l’ancienne version.
La version 852 est la version SQL Server 2016 et la version 782, la version SQL Server 2014. Une bonne référence pour les versions peut être trouvée sur cette page Microsoft .
Sur la base de vos explications, cela devrait être une version 782 DB. Comme il s'agit de la version 852 DB, cela signifie qu'il a été mis à niveau à l'aide de SQL Server 2016, et non de SQL Server 2014. Par conséquent, vous devez vérifier toutes les versions de SQL Server s'exécutant sur votre ordinateur/dev local, afin de confirmer que seul SQL Server 2014 est installé. en cours d'utilisation et non (potentiellement) SQL Server 2016 installé par VS 2017.
En outre, il semble que la version de votre utilisateur final soit 2014, et non 2016. Cela peut poser problème si la base de données actuelle est une base de données en mode SQL Server 2014. Essayez de vous connecter explicitement à TempDB avant de connecter la base de données. (Remarque: c'est quelque chose que je devais faire lorsque je rencontrais une incompatibilité en 2014-2016, bien que je ne me souvienne pas du problème.)
Si vous souhaitez que votre projet génère une base de données SQL Server 2014 que vous pouvez attacher sur la machine cliente, vous devez créer une instance du serveur sur votre machine. Pour ce faire, ouvrez la ligne de commande en mode administrateur et entrez la commande "sqllocaldb create v12.0 12.". Cela crée une instance de serveur appelée "v12.0" dans la version 12.0, SQL Server 2014.
Si le serveur n'a pas encore été démarré, il doit être démarré avec la commande "sqllocaldb start v12.".
Maintenant, vous devez changer votre chaîne de connexion comme ceci:
<connectionStrings>
<add name="con"
connectionString="Data Source=(LocalDB)\v12.0;AttachDbFilename=|DataDirectory|\binaaelmamorra.mdf;Integrated Security=True;Connect Timeout=30"/>
</connectionStrings>
Peut-être avez-vous mis quelques paramètres dans votre app.config
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v12.0" />
</parameters>
</defaultConnectionFactory>
Dans mon cas, j’avais déjà mis à jour la base de données avec la technique du code de structure d’entité en utilisant la dernière version de Visual Studio, puis j’ai essayé d’exécuter le projet avec une version plus ancienne et cette exception était indiquée. Je l'ai corrigé en supprimant simplement la base de données et en réexécutant la commande Update-Database -verbose
_ -verbose indique que vous pouvez voir quelles commandes ont été exécutées.