var is supposed to be used in areas where you are not really sure of the datatype which is returned.
You intend the value to be converted into a int so I suppose you know the datatype.
You cannot always expect a conversion as it actually depends on the data present in your variable. You can instead try to avoid errors with the following:
int nNumber = -1;
bool bIsConversionDone = Int32.TryParse(item, out nNumber);
if(!bIsConversionDone)
{
nNumber = -1;
}
da.Parameters("@KeySubject",int.Parse(nNumber) );