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,无论是否有:
都可以使用。
哪个更好,还是一样?
答案 0 :(得分:3)
@
。检查source code此处:
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查询字符串时使用的属性。
答案 1 :(得分:0)
参数之前的@
告诉sql解释器它是一个参数而不是别的。
如果省略,可能有效,因为列名和参数名之间可能存在歧义。
在你的情况下:
SELECT * FROM myTable WHERE name = @myName
即使您有一个名为myName
的列,也能正常工作,但是:
SELECT * FROM myTable WHERE name = myName
将不工作,因为无论您是引用列myName
还是参数myName
,sql解释器都会感到困惑。