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

时间:2016-03-01 04:37:51

标签: c# mysql exception

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

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

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

  

未处理的类型' System.FormatException'发生在Server.exe中   附加信息:输入字符串的格式不正确。

    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;
        }
    }

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

1 个答案:

答案 0 :(得分:2)

您必须在此方案中使用JSONObject ratesObject = jObj.getJSONIObject("rates"); String aud = ratesObject.getString("AUD"); ;

  

ExecuteScalar将执行查询,并返回第一列   查询返回的结果集中的第一行。额外   列或行将被忽略。

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

SELECT Count(*)

现在该命令已准备好执行。正如MSDN建议 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); 将返回我们需要转换为整数的ExecuteScalar(),但在这种情况下,object将始终返回整数值(count(),如果结果为空)因此0的输出将为cmd.ExecuteScalar()。所以查询执行如下:

boxed integer