C# 发送有效SqlParameter所需的最小数据

C# 发送有效SqlParameter所需的最小数据,c#,sql,sqlparameter,C#,Sql,Sqlparameter,在为我调用的存储过程构建参数时,我注意到一个奇怪的行为。在使用的表中,有一列的类型为VARCHAR16。当我为本专栏创建参数时,我的第一反应是这样做: ret = new SqlParameter(); ret.ParameterName = name; ret.Value = (string)value; 这种方法给了我一个错误,说字符串或二进制数据将被截断 该方法在我构建参数时有效: ret = new SqlParameter(name, type, length); ret.Param

在为我调用的存储过程构建参数时,我注意到一个奇怪的行为。在使用的表中,有一列的类型为VARCHAR16。当我为本专栏创建参数时,我的第一反应是这样做:

ret = new SqlParameter();
ret.ParameterName = name;
ret.Value = (string)value;
这种方法给了我一个错误,说字符串或二进制数据将被截断

该方法在我构建参数时有效:

ret = new SqlParameter(name, type, length);
ret.ParameterName = name;
ret.Value = (string)value;
有趣的是,当我为varchar参数设置长度时,如果该值是空字符串,则存储过程将顺利进行。但是,当我在值字段中输入一个或多个字母时,会出现相同的错误


我的问题是,为什么它接受长度声明不正确的null或空参数,以及为了正确传递参数,您必须在c中提供的最小信息是什么?

请发布更具体的代码。创建一个可执行的复制程序。演示如何尝试插入具有相同架构的临时表。我使用一行添加参数,如com.Parameters。Add@abc,SqlDbType.TinyInt.Value=100;。其中com是一个SqlCommand对象。@usr我在问某人是否知道他们的头顶,你不需要调试我的程序来找到答案,我会这样做。从内存中,Varchar将默认为30或50,因此我假设警告告诉你,如果你不指定长度,超过默认值的任何内容都将被截断。@christiandev当您将长度设置为9000以上时,如果字符串长度小于1,则将调用存储过程,存储过程将正常运行,但一旦值为.length>0,错误就会显示出来。我想知道为什么在某些情况下会忽略length属性,而在另一些情况下则不会。