AdventureWorks Sample Application - ASP.NET MVC

En effectuant une recherche sur les Samples qui utilisent ou démontrent l'utilisation de la base de données AdventureWorks, on trouve ce projet du codeplex :

Sample app for Adventureworks database
Projet du CodePlex latest version : advsampleapp-15464

Mais le blog de supertigerzou est en chinois !

En cherchant dans "Microsoft All-In-One Code Framework Sample Browser" :

AdventureWorks2008 - Application Sample
On trouve le projet HappyNet de Cyril Cathala que j'ai déjà longuement décrit dans mon blog c#.net.

advsampleapp-15464

Je reviens donc sur le projet advsampleapp-15464, en me disant que c'est bien dommage qu'il ne soit pas mieux documenté. En explorant mieux ce projet au sein du codeplex, rien n'est renseigné, la documentation retourne inlassablement vers le blog en chinois !? Et même si googlechrome me propose de traduire les pages rien de bien probant sur ce projet. On trouvera quand même quelques photos de supertigerzou qui semble être un vrai un bon développeur de l'Université Huazhong des Jiaotong University admis en 1994.

Alors qu'y a t-il dans ce projet ?

Structure de la solution advsampleapp-15464\Adventureworks\Adventureworks.sln :

AdventureWorks Sample Application Solution
Je l'ai ouvert avec Visual Studio 2010 Ultimate. Je me rends compte que je ne peux pas charger le projet Adventureworks.Web pourquoi ? Cette solution utilise allègrement les "NuGet Packages" elle ne conviendra donc pas aux versions Express de Visual Studio.

Liste des NuGet packages installés dans la solution advsampleapp-15464\Adventureworks\packages :
jQuery.1.5.2
jQuery.vsdoc.1.5.2
MefContrib.1.0.0.3
MefContrib.MVC3.1.0.0.3
Ninject.2.2.0.0
Ninject.MVC3.0.3
WebActivator.1.1.0.0
WebActivator.1.4

MefContrib ? Tient ce projet utilise Managed Extensible Framework ...

J'installe donc ASP.NET MVC 3, en anglais ... lol :
Installer ASP.NET MVC3
ASP.NET MVC 3 Installation Completed
Release Notes

Je clique à nouveau sur le projet Adventureworks.Web bouton droit "Reload Project" mais rien n'y fait :

AdventureWorks Sample App - Impossible de charger le projet
J'installe ASP.NET MVC 4, même chose. Mais quel est donc le type du projet Adventureworks.Web ?

Vous cherchez quel est le type d'un projet Visual Studio, regardez sur cette page :
http://www.mztools.com/Articles/2008/MZ2008017.aspx

J'y trouve l'informations suivante :
<ProjectTypeGuids>
ASP.NET MVC 3.0 {E53F8FEA-EAE0-44A6-8774-FFD645390401}
ASP.NET MVC 4.0 {E3E379DF-F4C6-4180-9B81-6769533ABE47}

Lorsque je créé une application MvcApplication1 mon Visual Studio ne me propose que MVC 4 :
<ProjectTypeGuids>{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

Et le projet Adventureworks.Web est en MVC 3
J'ai pourtant installé MVC 3 et MVC 4 mais mon Visual Studio ne me propose pas la création d'une application MVC 3



AdventureWorks2008 - Database Reference

Les références Microsoft dans le CodePlex sont un peu complexes à utiliser, il est difficile de s'y retrouver entre toutes ces versions de base de données. Voici donc quelques notes.

http://sqlserversamples.codeplex.com/
Microsoft SQL Server Community Projects & Samples. C'est la page d'entrée avec toutes les versions d'exemple de Data Base on y trouve également Northwind.

http://msftdbprodsamples.codeplex.com/Releases/
Références Microsoft sur la base AdventureWorks, on y trouvera des versions pour SQL Serber 2012, pour SQL Server 20008 R2 ...

Tellement compliqué de s'y retrouvé que l'on trouve dans le forum de discussion SQL Server une question :

AdventureWorks_Data.mdf, where is it?

Trouver AdventureWorks2008

Si vous installez SQL Server 2008 Express Edition la base de donnée AdventureWorks2008 se trouve dans le répertoire : C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\AdventureWorks_Data.mdf

Et donc l'installation d'une version Express de SQL Server est un bon moyen de récupérer une base AdventureWorks à la version de votre SQL Server ...

Documentation automatique de AdventureWorks2008

http://www.elsasoft.org/samples/...adventureworks/SqlServe..AdventureWorks2008/default.htm
Toute la base expliquée champ par champ.

Travail réalisé avec l'outil SqlSpec de Elsasoft.

Base de données multidimensionnelles - Cube - Hypercube - SGDB - SGDBR - RDBMS

Je me suis toujours demandé pourquoi les DBA (Data Base Administrateur) avaient un tel jargon et découvrant qu'en fait une relation n'était qu'un ID unique partager entre deux tables et qu'une clef primaire et une clef étrangère ou ne servaient qu'à préserver l'intégrité des données d'une table et à établir une relation entre deux tables, j'étais un peu déçu.

SGDB : Système de Gestion de Bases de Données en fait n'existe plus parce que maintenant tous les SGDB sont en fait des SGDBR c'est à dire des Systèmes de Gestion de Bases de Données Relationnels.

Ce qui donne en anglais : RDBMS pour Relational Data Base Management System.

Mais alors c'est quoi un Cube ?

Et là, on me dit qu'une base de données multidimensionnelle n'est pas autre chose qu'un cube et que le plus souvent, un cube a trois dimensions mais alors dans ce cas c'est quoi un hypercube !? 

Une base multidimensionnelle est contenue dans une seule table, elle peut être analysée avec un nouveau type d'outil : OLAP pour On-Line Analytical Processing

Tandis qu'une BDR s'analyse avec des outils OLTP pour On-Line Transaction Processing.

Je suis sûr que vous êtes comme moi, vous faisiez de l'OLTP sans le savoir. Bon et bien maintenant on le sait ... Mais franchement savoir qu'une base de données multidimensionnelle est contenue dans une seule table m'effraye un peu. En effet j'ai croisé des systèmes dans lesquels le DBA avait choisi de ne créer qu'une seule table, pour des problèmes de performance disait-il et franchement s'était la pagaille et on avait souvent l'envie de lui dire mais tu sais que tu peux créer un modèle relationnel ... Mais tout cela se mords un peu la queue.

En maintenant c'est quoi OLAP ?

On a tous fait des maths et l'on sait que les matrices nous permettent de concevoir des univers à n dimensions et d'y faire des calculs par exemple des calculs de distances : racine(x^2+y^2+z^2+ ...).

Magnifique travail, didactique, progressif et en bonus la surprise à l'Etape 8 une feuille Microsoft Excel avec l'utilisation du fameux outil "Rapport de tableau croisé dynamique".



Langage SQL - Les meilleurs cours, les meilleurs exemples

Autant cela parait simple d'écrire une requête SQL, autant je trouve qu'il est difficile de démarrer et que très vite les choses se compliquent.

Voici mes liens sur les meilleurs cours en SQL :

http://sqlpro.developpez.com/cours/sqlaz/fondements/#L1

http://sqlpro.developpez.com/cours/sqlaz/jointures/#LI

Fix error "Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance."

Au moment de la première installation de SQL Server et de Visual Studio sur une plateforme de développement logiciel,  vous ne pouvez pas utiliser SQL Server avec Visual Studio !? Vous êtes surpris ... ? Et pourtant c'est la vérité ! Voici donc la solution ...

Solution pour utiliser Visual Studio avec SQL Server

Parfois, j'ai peur que des soucis résolus disparaissent des serveurs et donc je copie la solution chez moi ... ;)
Windows 7, SQL Serveur 2008 Express Visual Studio 2010, je rencontre à nouveau ce problème. Si ce n'est pas une honte et ben oui cet idiot de SQL Serveur par défaut à l'installation, il n'autorise pas la création d'une instance de serveur par un utilisateur et VS (Visual Studio) ne peut donc pas l'utiliser (et vous trouvez ça normal ?!)

Les sources ici.

Have you ever tried to create a user instance database from Visual Studio on SQL Server 2005 Express (or above) and got this terrible (can it be more confusing?) message:

"Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed." If you did and tried to find how to resolve this you probably Googled (or Binged) for hours without being able to find the solution that really works.

Well lets put an end to that. Two simple things need to be done:

Step 1. Enabling User Instances on your SQL Server installation First we are gonna make sure we have enabled User Instances for SQL Server installation.

Go to Query Window in SQL Server Management Studio and type this:

exec sp_configure 'user instances enabled', 1.
Go 
Reconfigure
Run this query and then restart the SQL Server.

Step 2. Deleting old files
Now we need to delete any old User Instances.
Go to your C drive and find and completely DELETE this path (and all files inside):

C:\Documents and Settings\YOUR_USERNAME\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

(Dont forget to replace the green text in the path with your current username (if you are not sure just go to C:\Documents and Settings\ path to figure it out).

After deleting this dir you can go to Visual Studio, create ASP.NET WebSite and click on your App_Data folder and choose Add New Item and then choose SQL Server Database and it should work!!!

Addendum

Depuis que j'ai écris ce post, il me semble bien que l'article n'est plus accessible sur le site de aspdotnetfaq.
Et que la syntaxe de la commande est plutôt :

exec sp_configure 'user instances enabled', '1'

pas besoin du Go ... Have fun !

Autres lectures sur le sujet 

http://stackoverflow.com/questions/20865437/the-configuration-option-user-instances-enabled-does-not-exist
The problem is known issue. SQL Express cannot create a user instance using the set of engine files in your local app data folder, deleting them should allow sql server to recreate them with the correct credentials for you to F5 successfully.

Prevent saving changes that require the table to be re-created

J'ai créé une Base de Données dans un projet Visual Studio 2010 avec le Server Explorer mais je dois faire une modification de définition de ma nouvelle Base de Données mais je n'arrive pas à sauvegarder cette modification. Cet imbécile de SQL Server s'entête à me renvoyer un message :

Saving changes is not permitted. The changes you have made resuire the following tables to be dropped and re-created. You have either made changes to a table that can't bo re-created or enable the option Prevent saving changes that requires the table to be re-created.

Requirements : Visual Studio 2010, SQL Express, Visual Studio 2019

Saving changes is not permitted. The changes you have made resuire the following tables to be dropped and re-created. You have either made changes to a table that can't bo re-created or enable the option Prevent saving changes that requires the table to be re-created.
The changes you have made resuire the following tables to be dropped and re-created.
Et en 2019, c'est toujours valable !

Je crois que le plus idiot de ce truc c'est que le message de cette textbox n'est pas copiable pour pouvoir googooliser le plus rapidement possible.

Problème, impossible de sauver les modifications

Je modifie un clef d'index primaire :
Identity Specification :
  Is Identity : Yes
  Identity Increment : 1

Et au moment de sauvegarder mes modifications c'est la catastrophe :


Prevent saving changes that require table re-creation
Problème au moment de sauver les modifications de ma Base de Données SQL Server

Solution : décocher la case "Prevent saving changes"

Cette option se trouve dans le Menu :

Tools -> Article : Options -> Database Tools -> Table and Database Designers :
Décocher la case : Prevent saving changes that require table re-creation

Tools, Options, Database Tools
Les options de Visual Studio qui me permettent de modifier ma Base de Données SQL Server
Oui mais au moment où je cherche cette option dans mon MS Management Studio 2019 je ne la trouve plus ! Grrrr

En 2019 cette option existe encore et se trouve déplacée ici :

Tools -> Options -> Designers -> Table and Database Designers

You have either made changes to a table that can't bo re-created or enable the option Prevent saving changes that requires the table to be re-created.
You have either made changes to a table that can't bo re-created or enable the option Prevent saving changes that requires the table to be re-created.

Conclusion :

L'administration et la configuration des Bases de Données SLQ Server sont rendue difficiles par tout un tas d'options dont on ne devrait jamais avoir à se préoccuper ...

Attention : Une fois les modifications apportées à la base de données, il faut refaire les objets attachés à cette base, je pense notamment aux objets "Linq To Sql" ou "Entity Models" ...

IDENTITY_INSERT is set to OFF

Comment setter IDENTITY_INSERT à ON ?

Description du problème rencontré :

J'ai créé une nouvelle Database EmployeeDB pour un exemple de CRUD en WPF C#.NET utilisant un "Link To SQL Classes" mais au moment de l'exécution, j'ai une erreur : Cannot insert explicit value for identity column in table 'Employee' when IDENTITY_INSERT is set to OFF.

Est ce vraiment le problème ? Qu'elle est la solution ?

Les sources du projet Visual Studio C# sont ici :
CRUDDataGridWPF

Comment corriger l'erreur DENTITY_INSERT is set to OFF

Tentative de solution 1

Je tente de faire ce qui est préconisé par certains forums ...

Dans SQL Server Management Studio, j'attache ma base (ou Joindre)
Je créé une requette :

USE EmployeeDB;
GO
SET IDENTITY_INSERT dbo.Employee ON
GO

Et je l'exécute ...

Exécution de la requête SET IDENTITY_INSERT sur la Table de la Base de Données
Cela ne fonctionne pas ! La même erreur est toujours là !

Comme j'ai modifié la table Enployee, je prend la précaution de refaire mon "Link To SQL Classes" en Drag and Droppant ma table depuis le Server Explorer dans mon objet .dbml :

En drag and droppant ma table je recréé le Employee.dbml
Je n'ai plus l'erreur ...
Mais lorsque j'exécute à nouveau mon exemple, les données ne sont pas INSERTées dans la BD !

Je regarde alors d'un peu plus près le projet de référence et je vois dans l'App.config :

            connectionString="Data Source=B314LTRV\SQLEXPRESS;Initial Catalog=EmployeeDB;Integrated Security=True"

Mais d'où vient cette source ? B314LTRV !?

Tentative de solution 2

Je supprime l'objet EmployeeDB.dbml et je refais l'ajout d'item "Link To SQL Classes" en prenant soins de supprimer auparavant le fichier :
\\CRUDDataGridWPF\CRUDDataGridWPF\Properties\Settings.settings

Et de nettoyer le fichier :
\\CRUDDataGridWPF\CRUDDataGridWPF\App.config

Dernier point :
La BD EmployeeDB.mdf qui se trouve dans  le répertoire principal de mon projet possède l'attribut : "Copy to ouput directory" à Copy always cela peut engendrer des petits soucis, je le mets à "Copy if newer" ...

Conclusion

Le maniement des Base de Données SQL Server dans les projets .NET est souvent une très grosse source de problèmes. Il est difficile de réaliser des projets véritablement portables et réinstallables facilement sur une nouvelle plateforme.