我拿出代码中不必要的部分来阐明代码应该代表什么以及代码应该实际起作用,因为我发现在文本中用引号标注了额外的空格。
MySqlDataReader^ myReader;
try
{
conDataBase -> Open();
myReader = cmdDataBase -> ExecuteReader();
// int count = 0;
while (myReader -> Read())
{
count = count + 1; // This piece of code I want to rewrite,from here to the bottom
// of the page,password should not be in the numbers but in the
// letters, and that's what I do not know how to do it.
// Statement if should be if (char*) or something like that.
}
if (count == 1)
{
MessageBox::Show ("Username and password are correct");
}
else if (count > 1)
{
MessageBox::Show ("Username and password are duplicates ... access denied!");
}
else
{
MessageBox::Show ("Username and password are incorrect ... Please enter your username and password!");
}
}
catch ( Exception^ ex)
{
MessageBox::Show(ex -> Message);
}
}
}
};
答案 0 :(得分:1)
您提供的代码在任何数字上无法使用。
它唯一能做的就是
在SQL查询构造期间,代码不假设要提供任何“数字”。它实际上使用了一个名为password_txt->Text
的变量,它表明它是某种形式的TextBox
控件。代码从中获取“Text”并将其粘贴到查询中,没有任何假设。如果“文本”包含数字,则会粘贴数字。如果“Text”包含“mom_dad-and-MYDOG”,则代码将完全粘贴。此外,代码已经确保文本将用引号(...' " + Text + " ' ...
)包装,因此SQL语法对数字和文本都有效。
顺便说一句。请注意,将文本粘贴到查询中,无论是否确定引号,都会形成严重的安全问题。如果文本包含引号怎么办?你真的应该在这里使用QueryParameters。这很严重,但这是一个完全不同的故事。一定要阅读它。
返回数字/文字 - 因此,此代码并不关心“数字”。如果您的应用程序不允许密码为“text”,那么原因必须包含在代码的其他部分中。
从password_txt -> Text
判断,你可能有一个TextBox或类似的东西。检查其events
部分。您很可能会找到一些TextChanged或KeyPressed或KeyDown事件处理程序,例如,它会过滤掉除数字之外的所有按键。
//编辑:还查看 crashmstr 建议的内容 - 删除我刚刚提到的引号附近的额外空格。 ' 213 '
可能会强制到213,但' mom '
与表格中的“妈妈”不匹配。另一件事 - 确保检查数据库本身password
列的数据类型;)