How does the SqlCommand handle parameters with integer types?

.net, c#, sql, sqlparameter

Solution

Always provide the correct type, especially `int` is dangerous.

From MSDN:

Use caution when you use this overload of the `SqlParameter` constructor to specify `integer` parameter values. Because this overload takes a value of type Object, you must convert the integral value to an Object type when the value is zero, as the following C# example demonstrates:

Parameter = new SqlParameter("@pname", (object)0);

If you do not perform this conversion, the compiler assumes that you are trying to call the `SqlParameter (string, SqlDbType)` constructor overload.

So if you want to use a string parameter, convert it to the correct type:

sqlcmd.Parameters.Add(new SqlParameter("@value", value.ToString()));

or

sqlcmd.Parameters.AddWithValue("@value", value.ToString());

or (with the type)

var p = new SqlParameter("@value", typeof(string));
p.Value = value.ToString()
sqlcmd.Parameters.Add(p);

Problem

If I have this variable: ``` int value = 4; ``` which is to be passed as some sql parameter: ``` SqlCommand sqlcmd = new SqlCommand(); sqlcmd.Parameters.Add(new SqlParameter("@value", value)); ``` Will it be converted to string and handled automatically? or could it possibly cause some trouble? ie. when I do this: sqlcmd.ExecuteNonQuery();

Original source