什么是“?”在查询中意味着什么?

时间:2010-12-15 07:08:46

标签: c# .net sql

在以下查询中,“?”是什么意思?

this.AdminDelCmd.CommandText =
    "DELETE FROM Admin WHERE (admincd = ?) AND (terminalno = ?)";

5 个答案:

答案 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命令可以在开始时作为“预准备语句”进行预编译(解析),并在参数可用时执行期间更快。