tracker issue : CF-4200013

select a category, or use search below
(searches all categories and all time range)
Title:

CF2016 -- value of dbVarName is ignored

| View in Tracker

Status/Resolution/Reason: Closed/Withdrawn/

Reporter/Name(from Bugbase): Michael Ladakos / Michael Ladakos ()

Created: 10/12/2017

Components: Database

Versions: 2016

Failure Type: Others

Found In Build/Fixed In Build: CF2016 - Update 5 /

Priority/Frequency: Normal /

Locale/System: / Windows 10

Vote Count: 0

Problem Description: Recently upgraded from CF10 to CF2016. The stored procedures broke on lines that contained dbvarname. I would get an error that a databse procedure has failed to execute and the code would error out on the line containing the dbvarname without the prepended colon I inserted the colons and everything worked. 

About 1 month later (a few days ago)

I am given a new section of the website to test for upgrade to CF2016. The code still breaks. However, now the code breaks AFTER the stored procedure. When we try to use variables output from storedprocedures, they are null and errors occur. This is fixed by prepending the dbvarname value with a colon. However, the code will work regardless of the value of dbvarname is, and dbvarname functionality is not working. It is maintaining positional referencing for the stored procedure. 

Also, my debug output doesn't have values in the storedprocedure tables for dbvarname. Unsure if this is the expected behavior for it since dbvarname was disabled for so long. Maybe it wasn't fixed/updated. 

Steps to Reproduce:
In CF2016, any stored procedure utilizing dbvarname without a prepended symbol. Example follows:

<cfstoredproc procedure="find_passmod_age" datasource="#request.dsn#">
<cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" dbvarname=":p_version" value="1A" maxlength="5" null="No">
<cfprocparam type="In" cfsqltype="CF_SQL_VARCHAR" dbvarname=":p_user_logon" value="#variables.username#" maxlength="30" null="No">
<cfprocparam type="Out" cfsqltype="CF_SQL_VARCHAR" dbvarname=":p_days_ago" variablE="variables.p_days_ago" maxlength="4" null="No">
</cfstoredproc>

This is the current code, but I've been changing the values of dbvarname. examples of tests below:

dbvarname=":"
dbvarname=":xxx"
dbvarname=""
dbvarname="xxx"

and I also interposed the two IN cfprocparam lines and got different results. 

Actual Result:

If the colon is missing, it will error out. Instead of erroring out on the cfprocparam line with the dbvarname missing the colon, it errors out after the stored procedure when the out variable is used with a null value. 
If the colon is not missing, the procedure is run with positional referencing regardless of the value of dbvarname and is successful even if the value is null or has a value that doesn't match the database .

Expected Result:

If the colon is missing, it used to error out on the storedprocedure line. Unsure if this is intended. 
If the colon is not missing, it should use dbvarname to reference the variables used in the storedprocedure on the database. If the values don't match, it should error out. If the values do match, positional referencing shouldn't be required and the cfprocparam lines should be interchangeable without affecting the stored procedure operation. 

Any Workarounds:

My page can work by sticking to positional referencing, but the functionality of dbvarname does not appear to be working.

Attachments:

Comments:

had problems submitting bug and accidentally submitted twice -- this is duplicate of CF-4200012
Comment by Michael L.
230 | October 12, 2017 02:45:30 PM GMT