2009-10-31 6 views
2

Visual Studio 2008 a un bogue en ce que vous ne pouvez pas utiliser le concepteur de jeu de données pour définir un champ de type int pour être nullable. (Il y a des rapports d'erreur remontant à Visual Studio 2005, mais il semble que ce n'a jamais été abordée.)Concepteur de jeux de données Visual Studio Null

Le seul comportement de sélection est d'émettre un code qui déclenche une exception si une valeur NULL est passée en retrait de la base de données, plutôt que définir la valeur à null, ce qui nécessiterait le type de données à "int?" au lieu de "int". Un cas d'exemple dans le monde réel est lorsqu'une clé étrangère est nulle car l'objet dépendant n'a pas encore été affecté. Existe-t-il des solutions de contournement autres que 1, n'utilisant pas les ensembles de données Visual Studio, 2. modifiant le type de données en chaîne (qui autorise null mais annule le typage fort et force la conversion), ou 3. modifie le code émis (qui sera remplacé si des modifications sont apportées à l'ensemble de données via le concepteur).

Répondre

2

Essayez this link. Je soupçonne que l'auteur a sauté sur beaucoup des mêmes cerceaux que vous avez dû, y compris la mise à jour manuelle du code du concepteur DataSet (qui vient de se régénérer) et l'utilisation de classes partielles.

Ce qui a fonctionné pour lui dans VS2008 était de modifier le DataSet .XSD manuellement le fichier pour ajouter les valeurs suivantes pour les colonnes qu'il avait besoin de fixer:

msprop:nullValue="-1" 
nillable="true" 

Ce que cela fait est de retour -1 à la place de null sans erreurs.

L'auteur donne un exemple d'une colonne complète éditée comme ceci:

<xs:element name=“FolderParent_ID” msprop:nullValue=“-1” nillable=“true” msprop:Generator_UserColumnName=“FolderParent_ID” msprop:Generator_ColumnVarNameInTable=“columnFolderParent_ID” msprop:Generator_ColumnPropNameInRow=“FolderParent_ID” msprop:Generator_ColumnPropNameInTable=“FolderParent_IDColumn” type=“xs:int” minOccurs=“0” /> 

Ces mises à jour ne sont pas perdues lorsque le DataSet est édité et enregistré.

Juste avertissement: je n'ai jamais essayé ce code. Quelqu'un a commenté le blog de l'auteur en disant que cela ne fonctionnait pas pour lui dans VS2008 (cherchez le deuxième commentaire posté par "Tom"). Tom présente cependant une solution.

J'espère que cela fonctionne pour vous.

+0

semble fonctionner pour nous ici – hawbsl

0

Une solution de contournement a été suggérée sur le sujet connect.microsoft.com (Nullable types for typed dataset par Danila Korablin) qui illustre un hack fournissant une alternative utilisable pour la correction de l'ensemble de données. Pour le dire succinctement, il utilise les classes partielles, dans le module myDataSet .cs, en tant que référentiel pour ajouter des propriétés nullables à la classe row. Vous pouvez accéder à ces propriétés dans votre code mais pas dans le concepteur. Cette manière d'ajouter des propriétés ne peut pas non plus remplacer les propriétés cassées d'origine.

La fenêtre Sources de données n'affiche pas les propriétés que vous ajoutez de cette manière aux classes de l'ensemble de données. Si vous tentez de réparer la classe de table de données générée par MS en ajoutant des colonnes des types valables corrects, le visualiseur Sources de données ne les comprend pas, invalidant l'ensemble de données, de sorte qu'il n'affiche rien. Cela signifie que vous ne pouvez pas utiliser le concepteur intégré de Visual Studio pour accéder aux colonnes des types corrects. Cette déficience rend une opération aussi simple que la copie d'une ligne qui contient une colonne Nullable impossible.

Je peux vérifier que les colonnes nullables ne sont pas prises en charge dans le concepteur de jeu de données Visual Studio 2005.Microsoft a fait savoir à plusieurs reprises qu'ils ne régleraient pas ce problème.

Questions connexes