在为我调用的存储过程构建参数时,我注意到了一种奇怪的行为。在使用的表中,有一个类型为VARCHAR(16)的列。当我为这个专栏构建参数时,我的第一个本能是这样做:
ret = new SqlParameter();
ret.ParameterName = name;
ret.Value = (string)value;
这种方法给我一个错误String or binary data would be truncated
。
有效的方法是我构建参数时:
ret = new SqlParameter(name, type, length);
ret.ParameterName = name;
ret.Value = (string)value;
有趣的是,当我为varchar参数设置一个长度时,如果该值是一个空字符串,那么存储过程将继续顺利进行。但是,当我在值字段中添加单个字母或更多字母时,会出现相同的错误。
我的问题是为什么它接受一个null或空的参数,并且声明长度不正确,以及在c#中给出一个参数以便正确传递参数的最小信息是什么?