J'ai datatables suivantes dans ma database:
Notez où se trouve le slider, donc le champ a quelques espaces après le mot. Et puis j'appelle le code suivant pour insert une nouvelle valeur:
var tagList = new List<ProductTag> { new ProductTag { Name = "diepvries" } }; var sbCopy = new SqlBulkCopy(_dataContext.Database.Connection.ConnectionSsortingng) { BulkCopyTimeout = 60 * 10 }; sbCopy.WriteToServer(tagList.AsDataReader());
Cependant, l'exception suivante est levée
Violation de la contrainte PRIMARY KEY 'PK_dbo.ProductTags'. Impossible d'insert une key dupliquée dans l'object 'dbo.ProductTags'. La valeur de la key en double est (diepvries).
J'ai également testé avec le text "diepvries2" et cela a fonctionné. Qu'est-ce que je fais mal?
Selon cette page ,
SQL Server suit la spécification ANSI / ISO SQL-92 (section 8.2, <Predicate de comparaison>, règles générales n ° 3) sur la manière de comparer des strings avec des espaces.La norme ANSI nécessite un remplissage pour les strings de caractères utilisées dans les comparaisons. correspondre avant de les comparer. "
Quel genre de DB? Je sais que dans le server SQL, les strings sont "rembourrées" avec des espaces blancs à la même longueur avant la comparaison. En tant que tel, vos deux strings sont identiques en ce qui concerne la database SQL. Les détails sont ici .