在SqlCommand.Parameter.Add()方法中,长度参数是强制的还是不强制?

时间:2013-10-11 10:24:18

标签: c# sql-server ado.net

cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = blah;

在这个代码长度的参数是强制性的吗?

另外,如果我们在这个方法中没有使用长度参数,那么会出现任何与性能或SQL注入相关的问题吗?

请建议我 感谢

3 个答案:

答案 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可能会使用该参数信息来查看数据是否适合列(我会这样做)。