Designer DataSet VS2005 / VS2008, insérez une ligne dans une table contenant une colonne GUID générée automatiquement

StackOverflow https://stackoverflow.com/questions/806590

Question

J'ai un DataTable fortement typé créé avec le concepteur de DataSet VS2005 / VS2008.

La table a une colonne de clé primaire qui est un GUID, qui est rempli par SQL Server Le problème est quand je veux ajouter une ligne (ou plusieurs lignes) à mon DataTable et ensuite appeler le DataAdapter.Update (en transmettant le DataTable). Lorsque DataAdapter.Update est appelé, je reçois une exception SQL indiquant que impossible d'insérer NULL dans la colonne de clé primaire.

Comment indiquer au concepteur qu'il s'agit d'une colonne générée automatiquement et que je ne souhaite pas fournir de valeur pour les nouvelles lignes? Je veux juste la valeur générée par SQL.

Est-ce que je manque quelque chose ici ou est-ce une limitation du concepteur de DataSet?

Je sais comment y parvenir en utilisant LINQ to SQL, mais malheureusement je ne l’ai pas à ma disposition pour ce projet.

Était-ce utile?

La solution

Peut-être l'un d'entre eux:

  • Si vous n'avez pas besoin de la colonne dans votre DataSet pour votre application, supprimez-la.
  • Si vous voulez la colonne mais ne vous souciez pas de lui donner une valeur, changez-la pour autoriser DBNull.
  • Vous pouvez toujours désactiver l'application de la contrainte (probablement une mauvaise idée): DataSet.EnforceConstraints = false
  • Vous pouvez remplir la colonne avec une clé de substitution qui ne soit pas envoyée à la base de données.

Pour les deux premières options, si vous souhaitez que le concepteur garde votre structure synchronisée avec votre base de données, vous pouvez supprimer la colonne ou autoriser la valeur null par programme, peut-être juste à côté d'un "// HACK:". ; commentaire expliquant pourquoi.

Autres conseils

Vous utilisez sans doute DEFAULT NEWID () dans la définition de votre table SQL Server. Le problème peut donc être que le concepteur de jeu de données ne voit pas cette colonne comme générée automatiquement.

Peut-être que générer un guid dans votre code d'application pourrait être une solution? Sinon, vous pouvez définir la valeur par défaut dans votre jeu de données, mais vous devrez probablement également modifier les instructions DataAdapter Insert / Update afin que cette valeur par défaut ne soit pas insérée dans la table Sql Server.

Il pourrait également y avoir une autre solution dont je ne suis pas au courant ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top