C# 使用参数选择。添加不起作用

C# 使用参数选择。添加不起作用,c#,postgresql,parameters,C#,Postgresql,Parameters,我真的不知道这里发生了什么。这是一个简单的选择参数。添加,它不起作用 command.CommandText = "SELECT * FROM user WHERE email='@mail'"; command.Parameters.Add(new NpgsqlParameter("@mail", userEmail)); 如果我改为下面的命令,它会工作 command.CommandText = "SELECT * FROM user WHERE email='" +userEmail +

我真的不知道这里发生了什么。这是一个简单的选择参数。添加,它不起作用

command.CommandText = "SELECT * FROM user WHERE email='@mail'";
command.Parameters.Add(new NpgsqlParameter("@mail", userEmail));
如果我改为下面的命令,它会工作

command.CommandText = "SELECT * FROM user WHERE email='" +userEmail + "'";
我尝试了表中的其他列,其行为是相同的。电子邮件列定义为文本非空


我在这里遗漏了什么?

问题是单引号。我删除了它,代码运行正常。

不确定它是否会修复它,但您不需要在SQL语句中的参数周围加上单引号:command.CommandText=SELECT*FROM user WHERE email=@mail;应该没问题。您也应该将命令文本声明为字符串文字。正如@Tim所说,删除单引号。通过使用单引号,实际上使它不是一个参数。单引号专门表示字符串文字。想想它在C语言中是如何工作的。在字符串文字周围加上双引号,对吗?在变量周围加双引号吗?当然不是,因为那样它就不是变量了。这是一样的。