3

I just want to know why we use "@" while inserting or updating or deleting data in sql table, as I used @name like below.

 cmd.Parameters.Add(new SqlParameter("@fname", txtfname.Text));
4

3 回答 3

4

请参阅:SqlParameter.ParameterName 属性 - MSDN

ParameterName 以@paramname的形式指定。您必须在执行依赖参数的 SqlCommand 之前设置 ParameterName。

@由 使用,SqlCommand以便可以在命令文本中区分参数的值

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

于 2013-05-17T07:40:12.457 回答
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';

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

于 2013-05-17T07:46:27.967 回答
0

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

例子:

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

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

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

于 2013-05-17T07:44:02.647 回答