VW_MODULES CASE statement causing pagebase error

Description

The VW_MODULES view has the below CASE statement causing an error:

CASE WHEN tm.IconFile LIKE 'fileid=%' THEN
(SELECT IsNull(Folder, '') + [FileName]
FROM dbo.[vw_Files]
WHERE fileid = CAST(SUBSTRING(tm.IconFile, 8, 10) AS int)) ELSE COALESCE (tm.IconFile, '') END AS IconFile

When this view is joined to another table as in the stored procedure 'getModulebyDefinition', the subquery in the above codes is fired for some unknown reason. The substring returns a partial string of a file path for iconfile. It cannot be cast to integer and, therefore, causes the error stated below.

My proposed solution is to change the code to the following:

CASE WHEN tm.IconFile LIKE 'fileid=%' THEN
(SELECT IsNull(Folder, '') + [FileName]
FROM dbo.[vw_Files]
WHERE CAST(fileid AS nchar(10)) = SUBSTRING(tm.IconFile, 8, 10)) ELSE COALESCE (tm.IconFile, '') END AS IconFile

The result is the same but no cast accidental casting of strings to integers will happen. I am currently working on a code change and will issue a pull request when fixed.

Error:
[FATAL] DotNetNuke.Framework.PageBase - An error has occurred while loading page.

System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting the nvarchar value '/Sigma/Use' to data type int.

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.SqlDataReader.TryHasMoreRows(Boolean& moreRows)

at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)

at System.Data.SqlClient.SqlDataReader.Read()

at DotNetNuke.Common.Utilities.CBO.CreateObjectFromReader(Type objType, IDataReader dr, Boolean closeReader)

at DotNetNuke.Common.Utilities.CBO.FillObject[TObject](IDataReader dr)

at DotNetNuke.Entities.Modules.ModuleController.GetModuleByDefinition(Int32 portalId, String definitionName)

at DotNetNuke.UI.ControlPanels.ControlBar.GetTabURL(List`1 additionalParams, String toolName, Boolean isHostTool, String moduleFriendlyName, String controlKey, Boolean showAsPopUp)

at DotNetNuke.UI.ControlPanels.ControlBar.BuildToolUrl(String toolName, Boolean isHostTool, String moduleFriendlyName, String controlKey, String navigateUrl, Boolean showAsPopUp)

at ASP.admin_controlpanel_controlbar_ascx.__RenderControlPanel(HtmlTextWriter __w, Control parameterContainer)

at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)

at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)

at System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)

at System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer)

at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)

at ASP.admin_controlpanel_controlbar_ascx._Render_control1(HtmlTextWriter __w, Control parameterContainer)

at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)

at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)

at System.Web.UI.Control.Render(HtmlTextWriter writer)

at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)

at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)

at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)

at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)

at System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)

at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)

at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)

at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)

at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)

at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)

at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)

at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)

at DotNetNuke.Framework.PageBase.Render(HtmlTextWriter writer)

at DotNetNuke.Framework.DefaultPage.Render(HtmlTextWriter writer)

at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)

at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)

at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

QA Test Plan

None

Activity

Show:

Sebastian LeupoldOctober 18, 2017 at 4:38 PM

IMO this still needs to be reverted to using FilePath() function

Steven WestDecember 16, 2016 at 5:19 PM

This is STILL a bug in version 9. Just go the error again. There are 2 solutions that have been submitted. Whats the hold up?

Sebastian LeupoldMarch 10, 2016 at 10:29 AM
Edited

This has been introduced with "optimizations" in DNN 8.
Previously it was using static Function FilePath(), which was more suitable for the few cases where icons are used.
I suggest using the function again, which makes it easier to read as well.

Details

Assignee

Reporter

Story Size

Unknown

Severity

Major

Triage

Triaged

Includes Code Fix

No

Components

Affects versions

Priority

Created March 9, 2016 at 8:38 PM
Updated October 18, 2017 at 4:38 PM