C# 如何在where子句中传递参数?

C# 如何在where子句中传递参数?,c#,sql,asp.net,C#,Sql,Asp.net,这就是我试过的。但我没有得到任何错误,也没有输出。我做错了什么。以及为什么这个查询不起作用 SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = '@term' AND paid_or_unpaid = '@Paid' ORDER BY Id DESC

这就是我试过的。但我没有得到任何错误,也没有输出。我做错了什么。以及为什么这个查询不起作用

SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = '@term' AND paid_or_unpaid = '@Paid' ORDER BY Id DESC";
            cmd.Parameters.AddWithValue("@term", term);
            cmd.Parameters.AddWithValue("@Paid", paid);

但当我尝试使用不带参数的查询时,我会得到输出。

不要在查询的参数中使用
单引号

SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC";
        cmd.Parameters.AddWithValue("@term", term);
        cmd.Parameters.AddWithValue("@Paid", paid);

不要在查询的参数中使用
单引号

SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC";
        cmd.Parameters.AddWithValue("@term", term);
        cmd.Parameters.AddWithValue("@Paid", paid);

根据我的评论-不应该有单引号-它们将参数更改为文字。因此,您的查询正在寻找一个平衡,其中emp_id是字符串'@term',并且不会使用传入的参数。试一试

SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC";
        cmd.Parameters.AddWithValue("@term", term);
        cmd.Parameters.AddWithValue("@Paid", paid);

根据我的评论-不应该有单引号-它们将参数更改为文字。因此,您的查询正在寻找一个平衡,其中emp_id是字符串'@term',并且不会使用传入的参数。试一试

SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC";
        cmd.Parameters.AddWithValue("@term", term);
        cmd.Parameters.AddWithValue("@Paid", paid);

首先,查询字符串中不需要单引号:

cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC";

也就是说,我警告您不要使用
AddWithValue()
。这必须推断传递到字符串中的类型——任何时候代码都不是显式的,都有被误解的危险,例如,一篇博客文章解释了为什么这不是一个好主意。

首先,查询字符串中不需要单引号:

cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC";

也就是说,我警告您不要使用
AddWithValue()
。这必须推断传递到字符串中的类型——任何时候代码都不是显式的,都有被误解的危险,例如,一篇博客文章解释了为什么这不是一个好主意。

在单引号(')之间指定的任何内容都将被视为字符串。所以写参数名时不加引号('),它就可以工作了

"SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC"

代码的其余部分将是相同的。

在单引号(')之间指定的任何内容都将被视为字符串。所以写参数名时不加引号('),它就可以工作了

"SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC"
SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC";
        cmd.Parameters.AddWithValue("@term", term);
        cmd.Parameters.AddWithValue("@Paid", paid);

其余的代码将是相同的。

我认为您不需要在变量名称周围加单引号。您不需要在参数名称周围加单引号。@Param'
。@Rick:“不需要”是错误的术语,如果您用撇号传递它,它不是参数,而是字符串文字。@TimSchmelter您是正确的-我想“你不应该有单引号…”更准确一些。我认为你不需要在变量名称周围有单引号。你不需要在参数名称周围有单引号。@Rick:“不需要”是错误的术语,如果你用撇号传递它,它不是参数,而是字符串文字。@TimSchmelter你是正确的-我想”你不应该有单引号……”更准确
SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT balance FROM PersonalLoan_tb WHERE emp_id = @term AND paid_or_unpaid = @Paid ORDER BY Id DESC";
        cmd.Parameters.AddWithValue("@term", term);
        cmd.Parameters.AddWithValue("@Paid", paid);