例如,在为SqlServer ce语句创建命令文本时,您可以使用
作为示例command.CommandText = "INSERT INTO Region (RegionID, RegionDescription) VALUES (@id, @desc)";
我理解如何运行sql查询,但总是只是通过数据库系统传递一个带有sql语句的字符串。这对我来说是新的,我想了解。 @是否意味着它是一个变量,所以当它解析字符串时,它会将变量id的值插入到它所说的@id的字符串中?
我知道在php中,双引号允许解析器解析字符串中的变量值,并且想知道这是否相似。
然而,为了测试它,我做了一个简单的程序来测试这个理论。
string id = "FOO";
MessageBox.Show("@id");
它显示了文字@id,所以这让我感到困惑。在此先感谢您的帮助! 我只是觉得有必要了解我正在输入什么,而不是盲目地遵循这些例子。
答案 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);