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

时间:2016-09-01 10:10:47

标签: 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";
            cmd.Parameters.AddWithValue("@term", term);
            cmd.Parameters.AddWithValue("@Paid", paid);

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

5 个答案:

答案 0 :(得分:1)

不要在查询参数中使用single Quotes '

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);

答案 1 :(得分:1)

根据我的评论 - 单引号不应该存在 - 他们将参数更改为文字。所以你的查询正在寻找一个余额,其中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);

答案 2 :(得分:1)

单引号(')之间指定的任何内容都将被视为字符串。所以写参数名称不带引号('),它会起作用。

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

其余代码将是相同的。

答案 3 :(得分:1)

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);

答案 4 :(得分:0)

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

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

那就是说,我提醒你不要使用AddWithValue()。这必须推断传递给字符串的类型 - 并且任何时候代码都不明确,存在误解的危险。例如,Here是一篇博客文章,解释了为什么这不是一个好主意。