sql server-What';s C#中命令参数带或不带前导(@)的区别
本文关键字:区别 参数 server-What 命令 sql | 更新日期: 2023-09-27 18:00:25
C#中SqlCommand的参数名称中有没有前导字符(@
或:
)有什么区别?
command.CommandText = "SELECT * FROM myTable WHERE name = @myName";
command.Parameters.Add(new SqlParameter("@myName", "bob"));
但这还可以
command.Parameters.Add(new SqlParameter("myName", "bob"));
即使这样也能工作
command.Parameters.Add("myName", "bob");
我还没有测试第二个,但我可以在网上看到所有的。
我曾尝试过与Oracle对抗,无论是否使用:
,两者都有效。
那么,哪一个更好,还是它们都一样?
@
在您未指定时会自动添加。请查看此处的源代码:
internal string ParameterNameFixed {
get {
string parameterName = ParameterName;
if ((0 < parameterName.Length) && ('@' != parameterName[0])) {
parameterName = "@" + parameterName;
}
Debug.Assert(parameterName.Length <= TdsEnums.MAX_PARAMETER_NAME_LENGTH, "parameter name too long");
return parameterName;
}
}
这是为命令生成SQL查询字符串时使用的属性。
参数之前的@
告诉sql解释器它是一个参数,而不是其他参数。
如果您忽略了这一点,它可能会起作用,因为列名和参数名之间可能存在歧义。
在您的情况下:
SELECT * FROM myTable WHERE name = @myName
即使您有一个名为myName
的列,也能正常工作,但这个:
SELECT * FROM myTable WHERE name = myName
将不起作用,因为sql解释器会混淆您是指列myName
还是指参数myName
。