为什么我们在sql表中插入或更新或删除数据时使用“@”

时间:2013-05-17 07:36:42

标签: c# sql sqlparameters

我只是想知道为什么我们在sql表中插入或更新或删除数据时使用“@”,因为我使用了@name,如下所示。

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

3 个答案:

答案 0 :(得分:4)

请参阅:SqlParameter.ParameterName Property - MSDN

  

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

@使用

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

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

如果@未提供参数名称,则会添加该参数名称。请查看以下源代码(taken from here)

 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,则只会获得针对{{1}的记录}}

答案 1 :(得分:0)

SQL Server中的变量和参数前面是@字符。

示例:

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

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

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

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

P.S:我很抱歉我的语法错误和术语不正确,但我相信你现在应该已经明白了。 :)