C# SqlParameter构造函数整数长度问题
我目前正在调试一个SQL查询,该查询通过C#删除SQL server表中基于多个参数的项。目前,该声明失败 提供的参数之一基于项目的版本ID 此版本ID的SQL参数为:C# SqlParameter构造函数整数长度问题,c#,sql,sql-server,sqlparameter,C#,Sql,Sql Server,Sqlparameter,我目前正在调试一个SQL查询,该查询通过C#删除SQL server表中基于多个参数的项。目前,该声明失败 提供的参数之一基于项目的版本ID 此版本ID的SQL参数为: new SqlParameter("@versionId", SqlDbType.Int, 4) 例如,如果查询提供的版本ID为51096,那么它是否会在设置长度为“4”的整数参数上失败?不,它不会失败。即使您在此处输入0,在大小上也会起作用,但如果您的db类型为varchar或nvarchar,则它会将您的值截断为提供的大小
new SqlParameter("@versionId", SqlDbType.Int, 4)
例如,如果查询提供的版本ID为51096,那么它是否会在设置长度为“4”的整数参数上失败?不,它不会失败。即使您在此处输入0,在大小上也会起作用,但如果您的db类型为
varchar
或nvarchar
,则它会将您的值截断为提供的大小,在本例中为4
如果您的参数值大于int所能容纳的值(
2147483647
),则它将在运行时抛出错误。@Serpiton。我在一个连接有限的虚拟机上。我目前正在通过视觉进行“调试”,只是在快速排除“是”或“否”之后。你误解了长度的含义。对于固定长度的类型(包括int
),它完全被忽略。您根本不应该将其传递给SqlParameter
构造函数。即使它对整数有影响,它仍然意味着四个字节(大约-2G到+2G范围),而不是四个十进制数字。另一方面,如果您使用例如char
,您将得到四个十进制数字(如果您是这样存储的),但即使这样也不会导致错误-它会截断值。非常好的答案,谢谢。结果是一个不正确的ID。