参数名称前面的@有什么作用?

时间:2013-02-28 18:51:41

标签: c# sql winforms visual-studio

在参数SQL查询前面插入@符号时会做什么?

例如:

using (SqlCommand cmd = new SqlCommand("INSERT INTO [User] values (@Forename, @Surname, @Username, @Password)", con))
{
    cmd.Parameters.AddWithValue("@Forename", txtForename.Text);
    cmd.Parameters.AddWithValue("@Surname", txtSurname.Text);
    cmd.Parameters.AddWithValue("@UserName", txtUsername.Text);
    cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

    cmd.ExecuteNonQuery();
}

6 个答案:

答案 0 :(得分:7)

这就是表明 是查询中的参数名称 - 而不是尝试使用列中的字段。

在构造SqlParameter对象时是否严格需要它尚不清楚,但我认为保持一致是有意义的。)

答案 1 :(得分:5)

与其他人在此处所说的相反,@角色本身并没有做任何事情。您可以使用

添加参数
.AddWithValue("ParaName",value);

.AddWithValue("@ParaName",value);

并且它们都将匹配数据库端名为@ParamName的参数。所以这不是必需的。

话虽如此,总是在参数前面使用@是一种非常标准的做法,因为这正是它在数据库方面的命名方式。

答案 2 :(得分:1)

没什么神奇的 - 它只是SQL用来表示参数和局部变量的语法。它与C#@字符不同,它告诉编译器不要在字符串文字中处理转义序列:

string stringWithSlashes = @"Use '\n' to add a new line";

或者允许您使用保留字作为变量名称:

string @class = "Geometry";

答案 3 :(得分:0)

@表示它是一个输入/输出参数,其值可以从脚本外部传递。

答案 4 :(得分:0)

@符号表示SqlParameterCollection 参数名称。使用列中的字段。

Parameters

parameterName
Type: System.String

The name of the parameter.

答案 5 :(得分:0)

在这种情况下,@是SQL Server构造。 SQL Server查询的参数使用@符号指定,因为T-SQL(SQL Server编程语言)使用@符号表示变量。