为什么在 SQL 表中插入、更新或删除数据时要使用 "@"?

3
我只是想知道在SQL表中插入、更新或删除数据时为什么要使用“@”,就像我使用下面的@name一样。
 cmd.Parameters.Add(new SqlParameter("@fname", txtfname.Text));
3个回答

4

参见:SqlParameter.ParameterName 属性 - MSDN

ParameterName 的格式为@paramname。在执行依赖于参数的 SqlCommand 之前,必须设置 ParameterName。

@SqlCommand 使用,以便在 Command Text 中区分参数的值

SqlCommand cmd = new SqlCommand("Select * from yourTable where ID = @ID", conn);
                                                                  ^^^^^^^
                                                   //This identifies the parameter

如果未提供参数名称,则会添加@。请查看以下源代码:(摘自此处)
 internal string ParameterNameFixed {
            get {
                string parameterName = ParameterName;
                if ((0 < parameterName.Length) && ('@' != parameterName[0])) {
                    parameterName = "@" + parameterName;
                }
                Debug.Assert(parameterName.Length <= TdsEnums.MAX_PARAMETER_NAME_LENGTH, "parameter name too long");
                return parameterName;
            }
        }

编辑:

如果您在参数中不使用@符号,请考虑以下情况。

using (SqlConnection conn = new SqlConnection(connectionString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                conn.Open();
                cmd.CommandText = "SELECT * from yourTable WHERE ID = ID";
                cmd.Connection = conn;
                cmd.Parameters.AddWithValue("ID", 1);
                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
        }

以上代码将获取所有记录,因为它将被翻译成SELECT * from yourTable WHERE 1=1。如果你在参数ID前使用@,你将只得到ID = 1的记录。


0

在SQL Server中,变量和参数以@字符开头。

例如:

create procedure Something
  @Id int,
  @Name varchar(100)
as
...

在 C# 代码中创建参数对象以与数据库通信时,您还可以使用 @ 字符指定参数名称。

(SqlParameter 对象中有一个未记录的功能,如果您没有指定它,则会将 @ 添加到参数名称中。)


我们可以使用其他字符代替 @ 吗? - Gaurav
@Gaurav:不,@符号是用于参数的。你想用什么代替它,为什么? - Guffa
我只是想知道,仅此而已。 - Gaurav

0

好的,不冒犯之前的发帖者,但我会尽可能简单地向您解释,以便连7岁的孩子都能理解。 :)

从我的经验来看,在.SQL中使用'@'是因为你"没有明确指定将使用哪种数据类型或确切的名称"。"后来"你会指出'@'的确切值。

比如说,有人开发了一个包含每个收件人姓名的大型.SQL查询。

SELECT column_name,column_name FROM table_name WHERE column_name = @YOURNAME;

@YOURNAME = 'John Doe';

因此,在这种情况下,每个人只需在@YOURNAME处写下自己的姓名,它就会自动转换为查询(在启动时):

SELECT column_name,column_name FROM table_name WHERE column_name = 'John Doe';

附言:对于我的语法错误和不正确的术语,我感到很抱歉,但我相信你现在应该已经理解了。:)


1
你的变量使用示例并没有展示出变量实际上可以如何使用。在 where 之后,你需要一个条件,不能只是使用一个变量或者字面值。你需要像这样的东西:例如 ... where column_name = @YOURNAME - Guffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接