Cette erreur provient dans 99% des cas de l'attribut nil sur les champs de type "DateTime, Time, Date, Boolean, Whole Number et Decimal".
Si vous rendez un de ces champs null, vous aurez l'erreur précédente car le vide est considéré comme une chaine vide et donc le formatage des données n'est pas respecté...
La méthode de contournement est simple, encore faut-il la connaitre!
Il suffit d'utiliser ces 2 procédures codées en C# qui prennent en paramètre un XPathNavigator du noeud concerné.
La procédure "DeleteNil" permet d'enlever l'attribut nil du noeud s'il existe de manière à insérer une valeur dans le champ sans avoir d'erreur.
public void DeleteNil(XPathNavigator node)
{
if (node.MoveToAttribute("nil", http://www.w3.org/2001/XMLSchema-instance))
node.DeleteSelf();
}
La procédure "InsertNil", quand à elle, permet de supprimer la valeur d'un champ qui n'est pas de type texte.Pour cela il faut supprimer la valeur et remettre l'attribur nil:
public static void InsertNil(XPathNavigator node)
{
if(!node.MoveToAttribute("nil", "http://www.w3.org/2001/XMLSchema-instance"))
{
string result = string.Empty;
int endIndex = node.OuterXml.IndexOf(">");
result = node.OuterXml.Substring(0, endIndex) + " xsi:nil=\"true\" />";
node.OuterXml = result;
}
}
Et voila, vous voila débarassé du cauchemar du "schema validation found non-data type".
Il suffit à présent d'appeler la bonne prodédure.