int? t = 0;
cmd.Parameters.AddWithValue("@Res", ref t);
I get an error in the second line:
argument 2 may not be passed with ref keyword.
 
  
                     
                        
You can only pass an argument by reference with ref if the parameter is a ref parameter as well. AddWithValue doesn't have any ref parameters, so you can't use it that way. Note that you have to specify ref when calling a method if a parameter has the ref modifier. So:
public void WithRef(ref int x) {}
public void WithoutRef(int x) {}
...
int y = 0;
// Valid
WithRef(ref y);
WithoutRef(y);
// Invalid
WithRef(y);
WithoutRef(ref y);
Basically, there's no way of telling an ADO.NET command parameter to track the current value of a variable - after all, that variable could be a local variable which will be "gone" by the time you use the command.
Instead, just compute the right value and then set it for the parameter value.
 
                    See more on this question at Stackoverflow