Last Updated: February 25, 2016
·
544
· neelamsk

SqlParameter Constructor Beware...

Problem

I was using entity framework to call a stored procedure from code.

SqlParameter param1 = new    SqlParameter("@onlinestatus", true);

SqlParameter param2 = new SqlParameter("@userid", 21425);

SqlParameter param3 = new SqlParameter("@onlineid", 0);

db.Database.SqlQuery<online_stats>("online_stats @onlinestatus, @userid, @onlineid", param1, param2, param3);

But kept getting below error:

An exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

Additional information: The parameterized query '(@onlinestatus bit,@userid int,@onlineid int)online_stats @onlin' expects the parameter '@onlineid', which was not supplied.

Reason?????????

SqlParameter has some 7 constructors.
Two of which were creating problem for me.

1. SqlParameter(string parametername, Object value)

2. SqlParameter(string parametername, SqlDbType dbtype)

While I intended to use 1st constructor specifying the name & value for my parameter, the value '0' of the parameter was rather being treated as value of SqlDbType (as it is an enum). & i kept getting the above error.

I didn't had any issues with first two parameters as they has following values

@onlinestatus = true & @userid = 21425(which is biig number.)

I would have got the same issue for @userid, if the value was less then 25.

Solution:

The above error itself is a bit confusing. Anyways, The solution to it was either to use a different constructor or specify the value for the parameter separately.

param3.Value = 0;

Have a fresh tip? Share with Coderwall community!

Post
Post a tip