【发布时间】:2014-04-28 01:40:39
【问题描述】:
所以我正在尝试使用通过文本框输入的用户名和存储为字符串的密码来搜索我的数据库(用户将密码输入到文本框中,并对其进行了一些加密操作,加密密码然后存储为字符串;这个字符串是我用来搜索数据库的,因为数据库中存储了加密的密码)
该命令适用于通过文本框输入的用户名字符串,但是当我直接使用派生的密码字符串时它不起作用。我认为以下代码行中的语法错误会带来麻烦:
Dim cmd As OleDbCommand = New OleDbCommand
("SELECT * FROM UserInfo
WHERE [User ID] = '" & txtLoginID.Text & "'
AND [EncryptedPassword] = '" & EncPasswordString & "' ", con)
EncPasswordString 是存储通过各种操作获取的加密密码的字符串。我需要将此字符串与数据库中的 EncryptedPassword 进行比较。谢谢!
这是我用来获取 EncPasswordSting 的:
i = 0
While (PLength > 0)
charofP = sHex(i)
ascvalue = Strings.Asc(chartest)
decvalue = Convert.ToDecimal(ascvalue)
shiftdecvalue = decvalue + 1
asctochar = ChrW(shiftdecvalue)
emptychararray(i) = asc
i = i + 1
PLength = PLength - 1
End While
EncPasswordString = Convert.ToString(emptychararray)
【问题讨论】:
-
不要将 SQL 字符串塞入 OldDBCommand,而是将其设为字符串变量。当它在运行时构建时,您将能够在调试器中获取值。尝试将生成的 SQL 字符串粘贴到 SQL 窗口中……然后从那里调试它。
-
我会尝试,但我真的很想编辑上面给出的行。
-
“不起作用”是一个错误的诊断。你得到什么错误?如果您只是得到一个空白结果集,那么这不是语法错误。此外,Sql Injection 很糟糕,等等。如果您不知道那是什么,请查找并相应地修复您的代码。
-
看看你的字符集。如果您以 ASCII 格式输入文本,但字符串存储为 UTF-X,这可能会导致一些问题。
-
错误是:“System.Data.dll 中发生'System.Data.OleDB.OleDbException' 类型的未处理异常