在以下查询中,“?”是什么意思?
this.AdminDelCmd.CommandText =
"DELETE FROM Admin WHERE (admincd = ?) AND (terminalno = ?)";
答案 0 :(得分:9)
这不是三元运算符,也不是Nullable类型的对象。
这称为参数化查询,用于帮助防止SQL注入。这是SQL语法的“旧风格”。当您希望查询与多个不同的数据库(例如MySQL和SQL Server)一起使用时,可以使用此方法。同样用于SQL Server的新样式(如下面指出的那样)使用前缀为参数名称的“@”。 MySQL还使用“@”作为服务器端用户变量声明,这可能会引起一些混淆。
后来的代码填写了问号。如果您可以发布下几行,那将对我们有所帮助。
这里有一些链接可以更彻底地解释事情(第二个是针对asp但是适用):
http://msdn.microsoft.com/en-us/library/cc296201(v=sql.90).aspx
http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/
答案 1 :(得分:3)
这些是您的SQL查询中的positional parameters
(与命名参数相对)。
您的命令应该为每个位置参数(?)提供一个参数,其顺序与位置参数在命令文本中的显示顺序相同。
您通常使用位置参数
当您的提供程序不支持命名参数时。例如,许多OleDb提供程序不支持命名参数。
或者您希望与多个提供商进行互操作时。不同的提供程序可能对命名参数有不同的约定(例如,SQL Server对参数名称使用@前缀,但Oracle不使用)。因此,如果要对多个提供程序使用相同的查询语法,则通常更好地使用位置参数而不是命名参数。
答案 2 :(得分:1)
根据不可见查询的内容,它可以是Asaph提到的三元运算符的一部分,也可以是Nullable<type>
的简写。
所以,如果它说:
object.hasProperty ? "true" : "false";
这是三元运算符;
如果说:
int? anInt;
它意味着Nullable<int>
anInt,您可以编写anInt = null;
,如果您从数据库中读取并且有一个接受整数值的列,或者是一个NULL,那么这将非常方便。< / p>
答案 3 :(得分:1)
表示adminca AND terminalno的值将在运行时从数据源解析。
我认为您的数据源是DataTable,并且您尝试使用
更新数据库DataApapter
答案 4 :(得分:0)
“?” mark是参数的占位符,稍后将在代码中指定。通过这种方式,您的SQL命令可以在开始时作为“预准备语句”进行预编译(解析),并在参数可用时执行期间更快。