2009-12-28 4 views
0

Je souhaite qu'un champ dans une table de SQL Server 2008 contienne un nombre prédéfini de valeurs de chaîne pour que l'utilisateur puisse ensuite sélectionner une valeur dans une liste déroulante de mon application frontale WPF.Comment puis-je affecter un ensemble prédéfini de valeurs de chaîne à un champ de table dans SQL Server 2008?

Est-ce possible uniquement en affectant un type int numérique dans un champ de table SQL Server, puis en effectuant toutes les opérations via le codage frontal C# ou y a-t-il d'autres moyens?

Répondre

1

Il y a deux façons différentes de faire cela (enfin, deux qui me viennent à l'esprit). Aucun n'est spécifique à Sql Server.

D'abord, est de créer une table qui contient les valeurs qui vont dans la liste déroulante. Ce serait une table très simple, tels que

DayOfWeek
Nom varchar (9) PK

puis référence dans d'autres tables via une relation de clé étrangère

Heures
Id UniqueIdentifier PK
Jour varchar (9) FK
...

L'autre façon est de définir une ENUM dans votre application

public enum DayOfWeek { Monday, Tuesday, Wednesday, /*etc*/ } 

puis l'enregistrer comme un int dans votre base de données (oui, vous pouvez utiliser un autre type de données):

Heures
Id UniqueIdentifier PK
Int jour
...

Si vous attendez la liste à fluctuer du tout, la première technique est meilleur. Si vous vous attendez à ce que la liste soit statique, la seconde est généralement plus facile à gérer dans le code.

2

Faire une table contenant vos valeurs possibles et la référence du champ à la table avec un FOREIGN KEY:

CREATE TABLE possible_strings (string_val NVARCHAR(100) PRIMARY KEY) 

INSERT 
INTO possible_strings 
VALUES ('First value of the list') 

INSERT 
INTO possible_strings 
VALUE ('Second value of the list') 

ALTER TABLE mytable 
ADD CONSTRAINT fk_mytable_mystring_possible 
FOREIGN KEY (mystring) 
REFERENCES possible_strings (string_val) 

Pour afficher toutes les valeurs possibles dans une liste déroulante, il suffit de remplir avec les résultats de cette requête:

SELECT string_val 
FROM possible_strings 
+0

Ce serait bon pour la validation des données, mais je pense qu'il veut savoir comment utiliser les valeurs dans la partie frontale de l'application. – dnewcome

1

J'ai fait ce que vous pensiez en créant une table de recherche dans la base de données et un type Enum correspondant en C#. Le danger est que votre Enum et la table de la base de données finissent par se désynchroniser lorsque le code est modifié. En outre, les types Enum ne vont pas vous permettre d'utiliser de jolis noms lisibles dans votre application.

J'ai résolu ceci dans le passé en créant une classe qui charge les données de la base de données et les met en cache. Vous pouvez lier vos contrôles d'interface utilisateur en tant que source de données pour faciliter les choses sur les développeurs frontaux.

Questions connexes