gpt4 book ai didi

c# - 如果提交了错误的凭据,程序将抛出错误

转载 作者:行者123 更新时间:2023-11-29 06:16:17 26 4
gpt4 key购买 nike

关于安全性,这是一个肮脏的原型(prototype),因此密码没有哈希盐。

我正在测试一些 c# MySQL 代码,当我将正确的凭据发送到数据库时,程序返回值 1,这意味着正确。

但是,如果检查的值与结果不匹配,我会得到异常:

An unhandled exception of type 'System.FormatException' occurred in Server.exe Additional information: Input string was not in a correct format.

    public int CheckLoginCredentials(String username,string password)
{
string query = "SELECT * from testTable.user WHERE username='" + username + "' and password='" + password + "'";
int Count = -1;

//Open Connection
if (this.OpenConnection() == true)
{
//Create Mysql Command
MySqlCommand cmd = new MySqlCommand(query, connection);

//ExecuteScalar will return one value
try
{
Count = int.Parse(cmd.ExecuteScalar() + "");

}
catch (Exception e)
{

throw e;
}
//close Connection
this.CloseConnection();

return Count;
}
else
{
return Count;
}
}

我试图抛出异常,但它导致服务器崩溃。我怎样才能优雅地解决问题?

最佳答案

在这种情况下,您必须在此处使用 SELECT Count(*)

ExecuteScalar will Executes the query, and returns the first column of the first row in the result set returned by the query. Additional columns or rows are ignored.

还有一个更常见的建议;使用参数化查询来避免 SqlInjection;所以命令定义将如下所示:

        string query = "SELECT COUNT(*) from testTable.user WHERE username=@username and password=@password";
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);

现在命令已准备好执行。正如 MSDN 所建议的那样,ExecuteScalar() 将返回一个我们需要转换为整数的 object,但在这种情况下,count() 将始终返回一个整数值(0 如果结果为空),因此 cmd.ExecuteScalar() 的输出将是一个装箱整数。所以查询执行如下:

   int Count = Convert.ToInt32(cmd.ExecuteScalar());

关于c# - 如果提交了错误的凭据,程序将抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35714787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com