SqlCommand如何处理整数类型的参数?

use*_*469 1 .net c# sql sqlparameter

如果我有这个变量:

int value = 4;
Run Code Online (Sandbox Code Playgroud)

这将作为一些sql参数传递:

SqlCommand sqlcmd = new SqlCommand();
sqlcmd.Parameters.Add(new SqlParameter("@value", value));
Run Code Online (Sandbox Code Playgroud)

它会被转换为字符串并自动处理吗?或者它可能会导致一些麻烦?即.当我这样做:

sqlcmd.ExecuteNonQuery();

Tim*_*ter 6

始终提供正确的类型,尤其int是危险的.

来自MSDN:

使用SqlParameter构造函数的此重载指定integer参数值时请小心.因为此重载采用Object类型的值,所以当值为零时,必须将整数值转换为Object类型,如下面的C#示例所示:

Parameter = new SqlParameter("@pname", (object)0);
Run Code Online (Sandbox Code Playgroud)

如果不执行此转换,编译器会假定您正在尝试调用SqlParameter (string, SqlDbType)构造函数重载.

因此,如果要使用字符串参数,请将其转换为正确的类型:

sqlcmd.Parameters.Add(new SqlParameter("@value", value.ToString()));
Run Code Online (Sandbox Code Playgroud)

要么

sqlcmd.Parameters.AddWithValue("@value", value.ToString());
Run Code Online (Sandbox Code Playgroud)

或(与类型)

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