cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = blah;
在这个代码长度的参数是强制性的吗?
另外,如果我们在这个方法中没有使用长度参数,那么会出现任何与性能或SQL注入相关的问题吗?
请建议我 感谢
答案 0 :(得分:2)
在这个代码长度的参数是强制性的吗?
我不认为它是强制。但是当你澄清它时,这将是一个很好的做法。 SqlParameterCollection.Add(String, SqlDbType)
将SqlDbType
作为第二个参数,并且不需要参数的长度。只是小费;如果您的列是varchar(max)
,那么您应该使用VarChar
作为数据库类型。
如果我们在这个方法中没有使用长度参数 性能或SQL注入相关问题是否发生?
性能问题看起来无关紧要,因为长度不是必须。由于您在查询中使用parameterized sql,因此您不必担心 SQL Injection 攻击。
答案 1 :(得分:1)
由于它作为参数传递,我认为注入不会出现任何问题。关于使用varchar(max)
的长度,这将导致性能问题,因为它在内部将该类型保留为文本。
最后传递参数时不需要使用长度
答案 2 :(得分:0)
如果省略length参数,则会使用数据大小创建参数
cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = "this is 22 chars long.";
它创建一个VarChar(22)
类型的参数。在进行任何工作之前,sql server可能会使用该参数信息来查看数据是否适合列(我会这样做)。