我只是想知道为什么我们在sql表中插入或更新或删除数据时使用“@”,因为我使用了@name,如下所示。
cmd.Parameters.Add(new SqlParameter("@fname", txtfname.Text));
答案 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)
根据我的经验, .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:我很抱歉我的语法错误和术语不正确,但我相信你现在应该已经明白了。 :)