我只是想知道在SQL表中插入、更新或删除数据时为什么要使用“@”,就像我使用下面的@name一样。
cmd.Parameters.Add(new SqlParameter("@fname", txtfname.Text));
cmd.Parameters.Add(new SqlParameter("@fname", txtfname.Text));
参见: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
的记录。
在SQL Server中,变量和参数以@字符开头。
例如:
create procedure Something
@Id int,
@Name varchar(100)
as
...
在 C# 代码中创建参数对象以与数据库通信时,您还可以使用 @ 字符指定参数名称。
(SqlParameter 对象中有一个未记录的功能,如果您没有指定它,则会将 @ 添加到参数名称中。)
好的,不冒犯之前的发帖者,但我会尽可能简单地向您解释,以便连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';
附言:对于我的语法错误和不正确的术语,我感到很抱歉,但我相信你现在应该已经理解了。:)
where
之后,你需要一个条件,不能只是使用一个变量或者字面值。你需要像这样的东西:例如 ... where column_name = @YOURNAME
。 - Guffa