我对如何在我的asp中使用我的sql语句中的TWO而感到遗憾。 我试图获取先前输入的用户ID和密码,并将其与我在SQL上创建的数据库中的内容进行比较:
我认为我的问题来自于我的双引号和单引号。 UserID是我的数据库中的数字,密码是一个简短的文本。
var mycon = new ActiveXObject("ADODB.Connection");
var myrec = new ActiveXObject("ADODB.Recordset");
mycon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\Omnivox.mdb");
var txtpassword = Request.QueryString("txtpassword");
var txtuserID = parseInt (Request.QueryString("txtuserID"));
var sql;
sql = "SELECT UserID, UserPassword FROM UserOmnivox WHERE UserID=" +txtuserID+ " AND UserPassword='" + txtpassword + "';";
myrec.Open(sql, mycon);
谢谢
更新:它仍然无效。错误按摩是:没有为myrec.Open(sql,mycon)行提供一个或多个必需参数的值
答案 0 :(得分:2)
更改
sql = "SELECT * FROM UserOmnivox WHERE UserID=" +txtuserID "AND UserPassword="'+txtpassword';
到
sql = "SELECT * FROM UserOmnivox WHERE UserID=" +txtuserID + " AND UserPassword='"+txtpassword+"'";
答案 1 :(得分:1)
如果您进行了任何类型的基本调试,例如查看您正在生成的查询字符串,您就会看到:
sql = "SELECT [..snip..] UserID=" +txtuserID "AND UserPassword="'+txtpassword
^^--- no space
^--- missing +
产生
SELECT .... UserID=1234AND userPassword
^^---syntax error, no such field '1234AND'
然后,是的,你的报价也错了
sql = "SELECT ... UserID=" +txtuserID "AND UserPassword="'+txtpassword
^------------------^-- one string
^-----------------^-- another string
^---???
应该是
sql = "SELECT * FROM UserOmnivox WHERE UserID=" +txtuserID + " AND UserPassword='" + txtpassword + "';";
答案 2 :(得分:0)
我发现另一种更灵活的解决方案更好。有时根据条件你有一个条件,在其他条件你有零,而在其他条件你有两个。如果你走这条路,他们就不能解决这个问题。以下是......
Some sql query
where 1=1 -- ## A condition that will always be true and does nothing to your query.
and first optional where clause
and second optional where clause
这样一来,如果你在某一特定情况下没有第一个where子句,但你确实拥有第二个,那么你就不会错过"其中"。你总是有地方,你可以选择添加任何数组"和"部分到你的where声明。该方法的100%灵活性适用于所有挑战。另外,一旦超过wtf就更容易遵循代码,这是1 = 1的无意义反应。