2011-02-07 2 views
9

Qu'entend-on par ensembles de données fortement typés dans .Net? Quelqu'un peut-il expliquer avec un exemple clair et bref?Ensembles de données fortement typés et ensembles de données faiblement typés

Et aussi, quelle est la différence entre les ensembles de données fortement typés et faiblement typés?

+0

Personnellement, je ne suis pas sûr que je recommande * soit * dans la plupart du code; sauf si vous utilisez: SqlBulkCopy à partir de la mémoire, ou b: écrire un outil de requête générique comme SSMS ... –

+1

Avez-vous essayé d'examiner MSDN à ce sujet? http://msdn.microsoft.com/en-us/library/esbykkzb(v=VS.100).aspx –

+0

Les deux décrivent des choses que vous ne devriez pas utiliser. Vous devez utiliser ORM à la place :) – Stilgar

Répondre

3

Je suppose que la distinction va comme ceci:

fortement les ensembles de données sont tapés où l'ensemble de données connaît le type associé à chaque colonne avant ou l'ensemble de données est rempli.

Les ensembles de données faiblement typés forcent l'ensemble de données à deviner quel type pourrait être. Dans les cas où une colonne peut être null OU un nombre, l'ensemble de données peut incorrectement deviner que le type prévu est une chaîne et non un intendant nullable.

+0

Un Dataset (typé ou non typé) n'aura pas à deviner les types de données. –

9

Les jeux de données fortement typés sont générés sur la base d'un schéma Db. Ils sont constitués de classes dérivées de DataSet, DataTable et DataRow. Les colonnes Db deviennent des propriétés correctement typées de la classe dérivée TableRow.

Un Le jeu de données non typé signifie simplement l'utilisation directe de l'ensemble de données et non d'un descendant. Tout l'accès aux colonnes doit être casté.

Il n'existe pas de données faiblement typées.

7

TYPED Versus typées datasets Un ensemble de données typé est un ensemble de données qui est d'abord dérivé de la classe DataSet de base et utilise ensuite des informations du Concepteur de DataSet, qui est stocké dans un. Fichier xsd, pour générer une nouvelle classe de dataset fortement typée. Les informations provenant du schéma (tables, colonnes, etc.) sont générées et compilées dans cette nouvelle classe de jeu de données en tant qu'ensemble d'objets et de propriétés de première classe. Parce qu'un jeu de données typé hérite de la classe DataSet de base, la classe typée assume toutes les fonctionnalités de la classe DataSet et peut être utilisée avec des méthodes qui prennent comme paramètre une instance d'une classe DataSet

Un jeu de données non typé, en revanche , n'a pas de schéma intégré correspondant. Comme dans un jeu de données typé, un jeu de données non typé contient des tables, des colonnes, etc., mais ceux-ci sont uniquement exposés en tant que collections. (Cependant, après avoir créé manuellement les tables et d'autres éléments de données dans un ensemble de données typées, vous pouvez exporter la structure de l'ensemble de données en tant que schéma en utilisant la méthode WriteXmlSchema de données.)

Contrastant accès aux données dactylographiés et datasets typés La classe pour une L'ensemble de données typé a un modèle d'objet dans lequel ses propriétés prennent les noms réels des tables et des colonnes.Par exemple, si vous travaillez avec un jeu de données typé, vous pouvez référencer une colonne en utilisant le code tel que le suivant:

C# VBCopy

// This accesses the CustomerID column in the first row of the Customers table. 
string customerIDValue = northwindDataSet.Customers[0].CustomerID; 

J # Copier

// This accesses the CustomerID column in the first row of the Customers table. 
String customerIDValue = 
    northwindDataSet.get_Customers().get_Item(0).get_CustomerID(); 

En revanche , si vous travaillez avec un jeu de données typées, le code équivalent est:

C# VBCopy

string customerIDValue = (string) 
    dataset1.Tables["Customers"].Rows[0]["CustomerID"]; 

J # Copier

String customerIDValue = (String) 
    dataset1.get_Tables().get_Item("Customers").get_Rows().get_Item(0).get_Item("CustomerID"); 

accès dactylographié est non seulement plus facile à lire, mais il est entièrement pris en charge par IntelliSense dans le Code Visual Studio Editor. En plus d'être plus facile à utiliser, la syntaxe de l'ensemble de données typé fournit une vérification de type lors de la compilation, ce qui réduit considérablement la possibilité d'erreurs dans l'attribution de valeurs aux membres de l'ensemble de données. Si vous modifiez le nom d'une colonne dans votre DataSet et ensuite compilez votre application, vous recevez une erreur de génération. En double-cliquant sur l'erreur de construction dans la liste des tâches, vous pouvez accéder directement à la ou aux lignes de code faisant référence à l'ancien nom de colonne. L'accès aux tables et aux colonnes d'un jeu de données typé est également légèrement plus rapide au moment de l'exécution car l'accès est déterminé au moment de la compilation, et non via les collectes au moment de l'exécution.

Même si les ensembles de données typés présentent de nombreux avantages, il existe diverses circonstances dans lesquelles un ensemble de données non typé est utile. Le scénario le plus évident est quand aucun schéma n'est disponible pour l'ensemble de données. Cela peut se produire, par exemple, si votre application interagit avec un composant qui renvoie un jeu de données, mais que vous ne savez pas à l'avance quelle est sa structure. De même, il y a des moments où vous travaillez avec des données qui n'ont pas de structure statique et prévisible; dans ce cas, il est impossible d'utiliser un jeu de données typé, car vous devez régénérer la classe de jeu de données typée à chaque modification de la structure de données. Plus généralement, il existe plusieurs fois où vous pouvez créer un jeu de données de façon dynamique sans qu'un schéma soit disponible. Dans ce cas, l'ensemble de données est simplement une structure pratique dans laquelle vous pouvez conserver des informations, à condition que les données puissent être représentées de manière relationnelle. En même temps, vous pouvez tirer parti des fonctionnalités de l'ensemble de données, telles que la capacité de sérialiser les informations à transmettre à un autre processus ou d'écrire un fichier XML.

Questions connexes