Don't miss out Virtual Happy Hour today (April 26).

Try our conversational search powered by Generative AI!

Catalog Import throws "sql duplicate key error" although overwrite option is set as "true"

Vote:
 

When we call to Mediachase.Commerce.Catalog.ImportExport.Import method in order to import one catalog from an xml file , we are getting an Sql error regarding "Violation of Unique Key" but it shouldn't happen because we set the method param "overwrite" as true.

Error Number:2627,State:2,Class:14
System.Data.SqlClient.SqlException (0x80131904): Violation of UNIQUE KEY constraint 'UQ__#B5DEE65__C86C24AB46D15906'. Cannot insert duplicate key in object 'dbo.@ContentProperty'. The duplicate key value is (101, 1, <NULL>, 17, en).
The data for table-valued parameter "@ContentProperty" doesn't conform to the table type of the parameter. SQL Server error is: 3602, state: 30

Full stacktrace:

 2019-10-31 12:21:11,173 INFO [1] EPiServer.Logging.Compatibility.LogManager+CompatibilityWrapper.Info  - Initialize EPiServer.Enterprise
 2019-10-31 12:21:19,871 WARN [347] EPiServer.Logging.Compatibility.LogManager+CompatibilityWrapper.Warn  - Could not load type 'Valtech.DotFoods.Commerce.Catalog.Implementation.Models.Variants.CustomProperties.NutritionFactPropertyProperty', falling back to base type instead
 2019-10-31 12:22:24,696 INFO [1] EPiServer.Logging.Compatibility.LogManager+CompatibilityWrapper.Info  - Initialization from PreInitialize to Initialized completed in 95,592.0 ms
 2019-10-31 12:22:27,828 ERROR [339] Valtech.Base.Core.Implementation.Manager.Log.LogManager.WriteError EslCatalogImport - Starting import...
 2019-10-31 12:22:27,844 ERROR [339] Valtech.Base.Core.Implementation.Manager.Log.LogManager.WriteError EslCatalogImport - Start importing catalog properties
 2019-10-31 12:22:29,271 ERROR [339] Valtech.Base.Core.Implementation.Manager.Log.LogManager.WriteError EslCatalogImport - Finished importing catalog properties
 2019-10-31 12:22:29,272 ERROR [339] Valtech.Base.Core.Implementation.Manager.Log.LogManager.WriteError EslCatalogImport - Importing catalog Products
 2019-10-31 12:22:29,278 ERROR [339] Valtech.Base.Core.Implementation.Manager.Log.LogManager.WriteError EslCatalogImport - Start importing catalog nodes
 2019-10-31 12:22:30,494 ERROR [339] Valtech.Base.Core.Implementation.Manager.Log.LogManager.WriteError EslCatalogImport - Error in ImportWithHandlers
System.Data.SqlClient.SqlException (0x80131904): Violation of UNIQUE KEY constraint 'UQ__#B5DEE65__C86C24AB46D15906'. Cannot insert duplicate key in object 'dbo.@ContentProperty'. The duplicate key value is (101, 1, <NULL>, 17, en).
The data for table-valued parameter "@ContentProperty" doesn't conform to the table type of the parameter. SQL Server error is: 3602, state: 30
The statement has been terminated.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at EPiServer.Data.Providers.SqlTransientErrorsRetryPolicy.Execute[TResult](Func`1 method)
   at Mediachase.Data.Provider.SqlDataProvider.ExecuteNonExec(DataCommand command)
   at Mediachase.MetaDataPlus.Common.DBHelper.ExecuteNonQuery(String connectionString, CommandType commandType, String commandText, Int32 commandTimeout, DataParameter[] commandParameters)
   at Mediachase.MetaDataPlus.Configurator.MetaObjectDB.UpdateBatchOfMetaObject(MetaDataContext context, IDictionary`2 metaObjectsByLanguage)
   at Mediachase.MetaDataPlus.Internal.CatalogMetaObjectRepository.UpdateBatch(IDictionary`2 metaObjectsByLanguage)
   at Mediachase.Commerce.Catalog.ImportExport.Import.MetaDataReader.AcceptChanges(Dictionary`2 metaObjects)
   at Mediachase.Commerce.Catalog.ImportExport.Import.NodesReader.SaveNodes(ImportCatalogNodeCache relationCache, CatalogNodeDto workingDto, Dictionary`2 metaObjects)
   at Mediachase.Commerce.Catalog.ImportExport.Import.NodesReader.Read(ImportCatalogNodeCache relationCache)
   at Mediachase.Commerce.Catalog.ImportExport.Import.Importer.Import(Stream stream, String sourceDirectory, Boolean overwrite)
   at Valtech.DotFoods.Commerce.Catalog.Implementation.Manager.CatalogImport.CatalogImportManager.CatalogImport(Stream catalogMemoryStream) in C:\Workspace\Dotfoods\Episerver\Valtech.DotFoods.Commerce.Catalog.Implementation\Manager\CatalogImport\CatalogImportManager.cs:line 61
ClientConnectionId:8c136d02-58f5-40e6-82e6-c3dee7279c33
Error Number:2627,State:2,Class:14
 System.Data.SqlClient.SqlException (0x80131904): Violation of UNIQUE KEY constraint 'UQ__#B5DEE65__C86C24AB46D15906'. Cannot insert duplicate key in object 'dbo.@ContentProperty'. The duplicate key value is (101, 1, <NULL>, 17, en).
The data for table-valued parameter "@ContentProperty" doesn't conform to the table type of the parameter. SQL Server error is: 3602, state: 30
The statement has been terminated.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at EPiServer.Data.Providers.SqlTransientErrorsRetryPolicy.Execute[TResult](Func`1 method)
   at Mediachase.Data.Provider.SqlDataProvider.ExecuteNonExec(DataCommand command)
   at Mediachase.MetaDataPlus.Common.DBHelper.ExecuteNonQuery(String connectionString, CommandType commandType, String commandText, Int32 commandTimeout, DataParameter[] commandParameters)
   at Mediachase.MetaDataPlus.Configurator.MetaObjectDB.UpdateBatchOfMetaObject(MetaDataContext context, IDictionary`2 metaObjectsByLanguage)
   at Mediachase.MetaDataPlus.Internal.CatalogMetaObjectRepository.UpdateBatch(IDictionary`2 metaObjectsByLanguage)
   at Mediachase.Commerce.Catalog.ImportExport.Import.MetaDataReader.AcceptChanges(Dictionary`2 metaObjects)
   at Mediachase.Commerce.Catalog.ImportExport.Import.NodesReader.SaveNodes(ImportCatalogNodeCache relationCache, CatalogNodeDto workingDto, Dictionary`2 metaObjects)
   at Mediachase.Commerce.Catalog.ImportExport.Import.NodesReader.Read(ImportCatalogNodeCache relationCache)
   at Mediachase.Commerce.Catalog.ImportExport.Import.Importer.Import(Stream stream, String sourceDirectory, Boolean overwrite)
   at Valtech.DotFoods.Commerce.Catalog.Implementation.Manager.CatalogImport.CatalogImportManager.CatalogImport(Stream catalogMemoryStream) in C:\Workspace\Dotfoods\Episerver\Valtech.DotFoods.Commerce.Catalog.Implementation\Manager\CatalogImport\CatalogImportManager.cs:line 61
ClientConnectionId:8c136d02-58f5-40e6-82e6-c3dee7279c33

Any comment or direction will be appreciated. 

#208766
Edited, Oct 31, 2019 18:14
Vote:
 

It sounds like a bug, please contact to support.

#208778
Nov 01, 2019 9:01
Vote:
 

It would be more helpful it you can provide a full stacktrace. It sounds like you have some anomaly in your catalog data...

#208918
Nov 04, 2019 22:34
David Ortiz - Nov 05, 2019 13:24
Thanks Quan! I've added the full stracktrace. 

I see there a warn regarding a variant custom property that can't be loaded. Do you think that it could be the error reason?  
Vote:
 

We had the same issue. It looks like the issue was a result of the order of <Guid> and <Languages> node under catalog xml. It should be first and second child of <Catalog> respectively. The reason this error occurs is because how Mediachase code reads the xml stream. The import process expects <Guid> value to be first child of catalog and if it does not find in first child it assigns a new Guid and fails to process the catalog file as it would try to add a new catalog instead of overriding it. Moving the node orders solved the issues for us.

~ Sujit

#268069
Dec 08, 2021 17:40
David Ortiz - Feb 07, 2022 15:21
Thanks Sujit !! Would be awesome work with you some day! :P ..
This topic was created over six months ago and has been resolved. If you have a similar question, please create a new topic and refer to this one.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.