在条件不起作用的情况下进行内部联接

时间:2019-01-16 04:16:53

标签: sql asp.net-mvc

我在C#ASP.NET MVC中有一个SQL查询,它在没有WHERE条件的情况下可以很好地工作,但是在WHERE条件下,则不能工作。

这是SQL语句:

string strSQL = "SELECT u.USERID, u.NAME, io.CHECKTIME, io.CHECKTYPE, io.SENSORID 
                 FROM USERINFO u 
                 INNER JOIN CHECKINOUT io ON u.USERID = io.USERID 
                 WHERE u.NAME = " + conditionSearch.NAME;

使用conditionSearch.NAME是视图中的变量,我检查了一下,可以搜索需要的值。

您能否告诉我在这种WHERE情况下出了什么问题?谢谢!

2 个答案:

答案 0 :(得分:2)

此处的直接解决方法是将名称放在单引号内的WHERE子句中,以创建字符串文字:

string strSQL = "SELECT u.USERID, u.NAME, io.CHECKTIME, io.CHECKTYPE, io.SENSORID
    FROM USERINFO u INNER JOIN CHECKINOUT io ON u.USERID = io.USERID
    WHERE u.NAME = '" + conditionSearch.NAME + "'";

然而,直接连接以形成SQL查询字符串通常是严重的不良做法。更好的方法是使用带名称的占位符的预准备语句。也就是说,使用类似以下内容的查询:

SELECT u.USERID, u.NAME, io.CHECKTIME, io.CHECKTYPE, io.SENSORID
FROM USERINFO u
INNER JOIN CHECKINOUT io
    ON u.USERID = io.USERID
WHERE u.NAME = ?;

然后,让您的数据库担心如何正确绑定name参数。

答案 1 :(得分:0)

  

此处的直接解决方法是将名称放在WHERE子句中的单引号内,以创建字符串文字:

蒂姆,您好,感谢您的回复。我尝试使用db中的单引号来命名,但是结果仍然返回null。

哦,但是我尝试了您的解决方案('“ + conditionSearch.NAME +”'“),它可以完美运行。 非常感谢你!