2010-09-26 117 views
0

例如,创建一个SQLServer CE语句命令文本时,该示例具有使用@在SQL语句中做什么?

command.CommandText = "INSERT INTO Region (RegionID, RegionDescription) VALUES (@id, @desc)"; 

我知道如何运行SQL查询,但始终只是通过数据库系统使用SQL语句的字符串。这对我来说是新的,我想明白。 @是否意味着它是一个变量,所以当它解析字符串时,它会将变量id的值插入字符串中,该字符串表示@id? 我知道在PHP中,双引号允许解析器解析字符串中的变量值,并且想知道这是否相似。
但是,为了测试它,我做了一个简单的程序来测试这个理论。

string id = "FOO"; 
MessageBox.Show("@id"); 

它显示了文字@id,所以这让我感到困惑。感谢任何帮助! 我只是觉得有必要了解我在打字的内容,而不是盲目追随这些例子。

+1

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx – 2010-09-26 22:15:29

+0

你改变了你的标题吗? – Rookian 2010-09-26 22:20:27

+0

@Rookian,这不是一个不同的职位:P – 2010-09-26 22:26:24

回答

3

在这种情况下,@定义了要传递到SQL语句中的变量。

例如:

SqlParameter param = new SqlParameter(); 
param.ParameterName = "@id"; 
param.Value   = 666; 

然后你喜欢它添加到您的命令:

command.Parameters.Add(param); 

然后,在你select@id@desc将使用值的SqlParameter的值传递。

因此,如果您只是输出"@id"它将被解释为正常字符串。它只有在SQL查询中使用时才有意义。

3

在这种情况下,@符号用于参数化SQL命令,而不是用于string中的通用变量替换。

command.CommandText = "INSERT INTO Region (RegionID, RegionDescription) " + 
         "VALUES (@id, @desc)"; 
command.Parameters.AddWithValue("@id", 42); 
command.Parameters.AddWithValue("@desc, "Description of region forty-two."); 
+0

因此,在一个SQL查询中,它将id变量的值替换为正确的ID?那是我想确定的。 – 2010-09-26 22:27:13

+0

@Dusty:是的,但它实际上并没有执行字符串替换。它是SQL特有的,它是类型安全的,因此您不必担心转义字符串或将字符串转换为SQL友好格式或用引号括起来。这一切都由供应商处理。 – LukeH 2010-09-26 22:33:14

+0

这是SQL Server CE的特定结构,还是标准的查询语言结构? – 2010-09-26 22:43:04

3

@已在SQL(T-SQL)查询特殊含义(即:它是用来参数化查询),但在C#中的字符串,你刚才得到的字面@。实际上,command.CommandText仍然是@个字符的字符串;只有在需要时才进行替换(即:执行查询)。


如果你想在C#中的内插,使用String.Format(),如:

string name = "John"; 
string greet = String.Format("Hello, {0}", name); 

// this also works 
Console.WriteLine("Hello, {0}", name); 
+0

与TSQL不同的是,尽管MySQL也支持以&符号为前缀的变量。 – 2010-09-26 22:24:09

+0

是的,我正在使用string.format创建我用来传递给sql server的原始字符串。但是在我之前的问题之后,我切换到了参数化版本。 – 2010-09-26 22:28:35