@在SQL语句中做了什么?

时间:2010-09-26 22:10:18

标签: c# string variables

例如,在为SqlServer ce语句创建命令文本时,您可以使用

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

我理解如何运行sql查询,但总是只是通过数据库系统传递一个带有sql语句的字符串。这对我来说是新的,我想了解。 @是否意味着它是一个变量,所以当它解析字符串时,它会将变量id的值插入到它所说的@id的字符串中? 我知道在php中,双引号允许解析器解析字符串中的变量值,并且想知道这是否相似。
然而,为了测试它,我做了一个简单的程序来测试这个理论。

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

它显示了文字@id,所以这让我感到困惑。在此先感谢您的帮助! 我只是觉得有必要了解我正在输入什么,而不是盲目地遵循这些例子。

3 个答案:

答案 0 :(得分:3)

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

例如:

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

然后你将它添加到你的命令中:

command.Parameters.Add(param);

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

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

答案 1 :(得分: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.");

答案 2 :(得分: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);