We use a taxonomy to apply terms to pages on our site. The terms on Page A, for example, indicate which other pages should have a reference to Page A, and there is a module that does this. This is administered by adding terms to the Taxonomy page settings on each page.
Today my client reported that he had removed some extraneous page meta-tags from several pages and, after updating the page settings, noticed that the taxonomy terms attached to those pages had changed. I found that hard to believe, but ...
At the time he reported making the page settings changes, I found three items in the site's EventLog. Here they are, with some editing to obscure the site's actual url:
------------------------------------------
2/6/2015 1:45:23 PMGeneral Exception admin Company X. AssemblyVersion 7.3.4 PortalID 0 PortalName Company X UserID 2
AssemblyVersion:7.3.4
PortalID:0
PortalName:Company X.
UserID:2
UserName:admin
ActiveTabID:41
ActiveTabName:Pages
RawURL:/Admin/Pages
AbsoluteURL:/Default.aspx
AbsoluteURLReferrer:http://test2.com/Admin/Pages
UserAgent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18
DefaultDataProvider:DotNetNuke.Data.SqlDataProvider, DotNetNuke
ExceptionGUID:d5cf3de0-03a3-46a2-bda6-297b0c69478d
InnerException:Unhandled Error:
FileName:
FileLineNumber:0
FileColumnNumber:0
Method:System.Data.SqlClient.SqlConnection.
StackTrace:
Message:
System.Exception: Unhandled Error: ---> DotNetNuke.Services.Exceptions.PageLoadException: Cannot insert duplicate key row in object 'dbo.ContentItems_Tags' with unique index 'IX_ContentItems_Tags'. The duplicate key value is (603, 56).
The statement has been terminated. ---> System.Data.SqlClient.SqlException: Cannot insert duplicate key row in object 'dbo.ContentItems_Tags' with unique index 'IX_ContentItems_Tags'. The duplicate key value is (603, 56).
The statement has been terminated.
at System.Data.SqlClient.SqlConnection. (SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection. (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)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at PetaPoco.Database.Execute(String sql, Object[] args)
at DotNetNuke.Data.PetaPoco.PetaPocoHelper.ExecuteNonQuery(String connectionString, CommandType type, Int32 timeout, String sql, Object[] args)
at DotNetNuke.Data.SqlDataProvider.ExecuteNonQuery(String procedureName, Object[] commandParameters)
at DotNetNuke.Entities.Content.Data.DataService.AddTermToContent(Term term, ContentItem contentItem)
at DotNetNuke.Entities.Content.Taxonomy.TermController.AddTermToContent(Term term, ContentItem contentItem)
at DotNetNuke.Entities.Tabs.TabController.UpdateTab(TabInfo updatedTab)
at DesktopModules.Admin.Tabs.View.CmdUpdateClick(Object sender, EventArgs e) in c:\inetpub\vhosts\test2.com\httpdocs\DesktopModules\Admin\Tabs\Tabs.ascx.cs:line 699
at System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e)
at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument)
at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
--- End of inner exception stack trace ---
at DotNetNuke.Services.Exceptions.Exceptions.ProcessPageLoadException(Exception exc, String URL)
at DotNetNuke.Framework.PageBase. (EventArgs e)
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.default_aspx.ProcessRequest(HttpContext context) in c:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\db4b2c8b\606fe52e\App_Web_koidbhvm.4.cs:line 0
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
--- End of inner exception stack trace ---
Source:
Server Name: GENERIC223
2/6/2015 1:45:08 PMGeneral Exception admin Company X. AssemblyVersion 7.3.4 PortalID 0 PortalName Company X UserID 2
AssemblyVersion:7.3.4
PortalID:0
PortalName:Company X.
UserID:2
UserName:admin
ActiveTabID:41
ActiveTabName:Pages
RawURL:/Admin/Pages
AbsoluteURL:/Default.aspx
AbsoluteURLReferrer:http://test2.com/Admin/Pages
UserAgent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18
DefaultDataProvider:DotNetNuke.Data.SqlDataProvider, DotNetNuke
ExceptionGUID:f2caa8e3-5c2f-43c8-93d8-ca590a0a7f67
InnerException:Unhandled Error:
FileName:
FileLineNumber:0
FileColumnNumber:0
Method:System.Data.SqlClient.SqlConnection.
StackTrace:
Message:
System.Exception: Unhandled Error: ---> DotNetNuke.Services.Exceptions.PageLoadException: Cannot insert duplicate key row in object 'dbo.ContentItems_Tags' with unique index 'IX_ContentItems_Tags'. The duplicate key value is (595, 55).
The statement has been terminated. ---> System.Data.SqlClient.SqlException: Cannot insert duplicate key row in object 'dbo.ContentItems_Tags' with unique index 'IX_ContentItems_Tags'. The duplicate key value is (595, 55).
The statement has been terminated.
at System.Data.SqlClient.SqlConnection. (SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection. (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)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at PetaPoco.Database.Execute(String sql, Object[] args)
at DotNetNuke.Data.PetaPoco.PetaPocoHelper.ExecuteNonQuery(String connectionString, CommandType type, Int32 timeout, String sql, Object[] args)
at DotNetNuke.Data.SqlDataProvider.ExecuteNonQuery(String procedureName, Object[] commandParameters)
at DotNetNuke.Entities.Content.Data.DataService.AddTermToContent(Term term, ContentItem contentItem)
at DotNetNuke.Entities.Content.Taxonomy.TermController.AddTermToContent(Term term, ContentItem contentItem)
at DotNetNuke.Entities.Tabs.TabController.UpdateTab(TabInfo updatedTab)
at DesktopModules.Admin.Tabs.View.CmdUpdateClick(Object sender, EventArgs e) in c:\inetpub\vhosts\test2.com\httpdocs\DesktopModules\Admin\Tabs\Tabs.ascx.cs:line 699
at System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e)
at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument)
at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
--- End of inner exception stack trace ---
at DotNetNuke.Services.Exceptions.Exceptions.ProcessPageLoadException(Exception exc, String URL)
at DotNetNuke.Framework.PageBase. (EventArgs e)
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.default_aspx.ProcessRequest(HttpContext context) in c:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\db4b2c8b\606fe52e\App_Web_koidbhvm.4.cs:line 0
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
--- End of inner exception stack trace ---
Source:
Server Name: GENERIC223
2/6/2015 1:44:53 PMGeneral Exception admin Company X. AssemblyVersion 7.3.4 PortalID 0 PortalName Company X UserID 2
AssemblyVersion:7.3.4
PortalID:0
PortalName:Company X.
UserID:2
UserName:admin
ActiveTabID:41
ActiveTabName:Pages
RawURL:/Admin/Pages
AbsoluteURL:/Default.aspx
AbsoluteURLReferrer:http://test2.com/Admin/Pages
UserAgent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18
DefaultDataProvider:DotNetNuke.Data.SqlDataProvider, DotNetNuke
ExceptionGUID:76fc2ed7-a222-42da-8b3b-9b02cf9efbae
InnerException:Unhandled Error:
FileName:
FileLineNumber:0
FileColumnNumber:0
Method:System.Data.SqlClient.SqlConnection.
StackTrace:
Message:
System.Exception: Unhandled Error: ---> DotNetNuke.Services.Exceptions.PageLoadException: Cannot insert duplicate key row in object 'dbo.ContentItems_Tags' with unique index 'IX_ContentItems_Tags'. The duplicate key value is (339, 54).
The statement has been terminated. ---> System.Data.SqlClient.SqlException: Cannot insert duplicate key row in object 'dbo.ContentItems_Tags' with unique index 'IX_ContentItems_Tags'. The duplicate key value is (339, 54).
The statement has been terminated.
at System.Data.SqlClient.SqlConnection. (SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection. (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)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at PetaPoco.Database.Execute(String sql, Object[] args)
at DotNetNuke.Data.PetaPoco.PetaPocoHelper.ExecuteNonQuery(String connectionString, CommandType type, Int32 timeout, String sql, Object[] args)
at DotNetNuke.Data.SqlDataProvider.ExecuteNonQuery(String procedureName, Object[] commandParameters)
at DotNetNuke.Entities.Content.Data.DataService.AddTermToContent(Term term, ContentItem contentItem)
at DotNetNuke.Entities.Content.Taxonomy.TermController.AddTermToContent(Term term, ContentItem contentItem)
at DotNetNuke.Entities.Tabs.TabController.UpdateTab(TabInfo updatedTab)
at DesktopModules.Admin.Tabs.View.CmdUpdateClick(Object sender, EventArgs e) in c:\inetpub\vhosts\test2.com\httpdocs\DesktopModules\Admin\Tabs\Tabs.ascx.cs:line 699
at System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e)
at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument)
at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
--- End of inner exception stack trace ---
at DotNetNuke.Services.Exceptions.Exceptions.ProcessPageLoadException(Exception exc, String URL)
at DotNetNuke.Framework.PageBase. (EventArgs e)
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.default_aspx.ProcessRequest(HttpContext context) in c:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\db4b2c8b\606fe52e\App_Web_koidbhvm.4.cs:line 0
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
--- End of inner exception stack trace ---
Source:
Server Name: GENERIC223
----------------------------------
"The duplicate key value is (603, 56)" appears to refer to TabId=603 and TermId=56. This makes sense from the pages that were being worked on and the terms that were appropriate to the pages.
If this was simply a failure to insert keys, I don't understand how the terms were changed, but it's late ...
So ... is this a DNN bug, an error in the table, or something else?
Thoughts and ideas will be appreciated.
(Oh, and I now believe that client!)
Thanks!