Comment puis-je résoudre cette erreur un c #

Je veux insert des données dans une table de database:

myCommand.CommandText = "INSERT INTO Selectionner (IdPrestation, IdPhrase, DegreUrgence,RisqueConcerne,rowguid,Cotation) " + "VALUES ('" +new Guid(emp.IdPrestation) + "', '" +new Guid(emp.IdPhrase)+ "', '" + emp.DegreUrgence + "','" + emp.RisqueConcerne + "','" + new Guid(emp.rowguid) + "','" + emp.Cotation + "')"; 

Mais cela renvoie une erreur:

Guid doit contenir 32 numbers avec 4 tirets
(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Comment puis-je résoudre cette erreur?

Un ou plusieurs de vos

 emp.IdPrestation //Or emp.IdPhrase //Or emp.rowguid //Check them before creating 

est / n'est pas un GUID . C'est pourquoi il y a une erreur.

EDIT: commence

Comment utiliser Guid.TryParse() qui renvoie true si l'opération d'parsing a réussi; sinon, faux.

 //How to parse safely Guid IdPrestation; Guid IdPhrase; Guid rowguid; if(Guid.TryParse(emp.IdPrestation, out IdPrestation) && Guid.TryParse(emp.IdPhrase, out IdPhrase) && Guid.TryParse(emp.rowguid, out rowguid) ) { //all variables have been parse successfully //Execute the sql query as follows using parameters } 

EDIT: se termine

En outre, passer des parameters en tant que string directe avec inline sql est une unsafe bad practice . Au lieu de cela, use a parameterised query .

 myCommand.CommandText = "INSERT INTO yourTableName (c1, c2, ...) VALUES (@p1, @p2,...)"; myCommand.Parameters.Add(new SqlParameter("p1", valueforCol1)); myCommand.Parameters.Add(new SqlParameter("p2", valueforCol2)); ... 

Essayez d'utiliser une requête paramétrée comme première amélioration.

Ensuite, essayez d'utiliser Guid.Parse (string s) au lieu de nouveau Guid (string s) . De cette façon, je m'attends à ce qu'une exception soit levée pour les strings qui ne sont pas conforms.

Le constructor pourrait être un peu permissif, et dans ce cas, vous voudriez échouer rapidement afin de savoir quel domaine vous pose problème.

Vous ne pouvez pas créer GUID simplement à partir d'une string, la string doit être conforme

 Guid originalGuid = Guid.NewGuid(); originalGuid.ToSsortingng("B") gets converted to {81a130d2-502f-4cf1-a376-63edeb000e9f} 

De même

 "N" - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (32 digits) "D" - xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (32 digits separated by hyphens) "B" - {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} (same as "D" with addition of braces) "P" - (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) (same as "D" with addition of parentheses) "X" - {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00.0x00}} 

Le guid lui-même n'a pas de format. C'est juste une valeur. Notez que vous pouvez créer des guids en utilisant NewGuid ou en utilisant le constructor du guid. En utilisant NewGuid, vous n'avez aucun contrôle sur la valeur du guid. En utilisant le constructor du guid, vous pouvez contrôler la valeur. L'utilisation du constructor est utile si vous avez déjà une représentation sous forme de string d'un guid (peut-être vous l'avez lu dans une database) ou si vous voulez faciliter l'interprétation d'un guid pendant le développement. Vous pouvez également utiliser les methods Parse , ParseExact , TryParse et TryParseExact .

Ainsi, vous pouvez créer des guids comme ceci:

 Guid g1 = Guid.NewGuid(); //Get a Guid without any control over the contents Guid g2 = new Guid(new ssortingng('A',32)); //Get a Guid where all digits == 'A' Guid g3 = Guid.Parse(g1.ToSsortingng()); Guid g4 = Guid.ParseExact(g1.ToSsortingng("D"),"D"); Guid g5; bool b1 = Guid.TryParse(g1.ToSsortingng(), out g5); Guid g6; bool b2 = Guid.TryParseExact(g1.ToSsortingng("D"),"D", out g6);