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

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

此外,如果我们在此方法中不使用长度参数,是否会发生任何与性能或 SQL 注入相关的问题?

请建议我谢谢

4

3 回答 3

2

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

我不认为这是强制性的。但是,当您澄清它时,这将是一个很好的做法。SqlParameterCollection.Add(String, SqlDbType)作为第二个参数,SqlDbType参数的长度不是必需的。只是一个提示;如果您的列是varchar(max),那么您应该VarChar用作 db 类型。

如果我们在此方法中没有使用长度参数,是否会发生任何与性能或 SQL 注入相关的问题?

性能问题看起来无关紧要,因为长度不是必须的。而且由于您在查询中使用参数化 sql,因此您不必担心SQL 注入攻击。

于 2013-10-11T10:34:31.510 回答
1

由于它作为参数传递,我认为注入不会出现任何问题。关于长度,如果您使用varchar(max),这将导致性能问题,因为它在内部将该类型保留为文本。

最后,在传递参数时不需要使用 lengh

于 2013-10-11T10:28:27.790 回答
0

如果省略长度参数,它会创建具有数据大小的参数

cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = "this is 22 chars long.";

它创建一个类型的参数VarChar(22)。sql server 可能会在执行任何工作之前使用该参数信息来查看数据是否适合列(我会这样做)。

于 2013-10-11T12:04:47.637 回答