Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Procedure or function expects parameter, which was not supplied. A nullable column throwing exception

I am creating/updating a record in sql db with a stored procedure. I am supplying around 30 parameters from my C# Data Access Layer. sql table has all the columns null able apart from its primary key column. here when i supply a null value to a null able column, it is throwing an exception of "Procedure or function 'spFullUpdate' expects parameter '@App1TAPAYears', which was not supplied.". In my c# code I can clearly see the column is supplied with a null value. Could please anyone tell me how I can rectify this issue. Following is my code snippet. Setting value to the data object is as follow

Dt.TimeAtPreviousAddressYears = int.TryParse(TimeatPreviousAddressYears.Text, out intOut) ? intOut : (int?)null;

following is the nullable property in my entity class

        public int? TimeAtPreviousAddressYears { get; set; }

My data access layer adding parameter code is as follow

cmd.Parameters.Add("@App1TAPAYears", SqlDbType.Int).Value = dataObject.TimeAtPreviousAddressYears;
SqlDataAdapter da = new SqlDataAdapter(cmd);
                conn.Open();
                cmd.ExecuteNonQuery();

It can clearly be seen that the parameter is added and null value is supplied to a null able column but it still producing exception. Anyone's help will really be appreciated.

Kind Regardds

like image 919
Learning Curve Avatar asked Sep 12 '13 08:09

Learning Curve


1 Answers

nullable != DBNull.Value

So you can't pass (int?)null to the parameter value but instead pass DBNull.Value

Like:

if (dataObject.TimeAtPreviousAddressYears.HasValue) 
{ 
    cmd.Parameters.Add("@App1TAPAYears", SqlDbType.Int).Value =dataObject.TimeAtPreviousAddressYears;
}else
{
    cmd.Parameters.Add("@App1TAPAYears", SqlDbType.Int).Value = DBNull.Value;
}
like image 138
Heslacher Avatar answered Sep 17 '22 13:09

Heslacher