-1

この関数を実行しようとすると、「System.InvalidCastException: 指定されたキャストが無効です」というエラーが表示されます。

System.InvalidCastException: Specified cast is not valid.
   at server.mihail.credits.HandleRequest() in F:\Users\Mihail\Documents\new-sentients-2016\server\mihail\credits.cs:line 34
   at server.RequestHandler.HandleRequest(HttpListenerContext context) in F:\Users\Mihail\Documents\new-sentients-2016\server\RequestHandlers.cs:line 37
   at server.Program.ProcessRequest(HttpListenerContext context) in F:\Users\Mihail\Documents\new-sentients-2016\server\Program.cs:line 156

これが関数です。パラメーターguidをメールアドレスとして使用し、パラメーターエイドを1番にして実行しようとしました。

私を助けてください、私はそれを修正するために一日中努力してきました。

class credits : RequestHandler
{
    protected override void HandleRequest()
    {
        string status = "403";
        using (Database db = new Database())
        {
        NameValueCollection query = HttpUtility.ParseQueryString(Context.Request.Url.Query);
        MySqlCommand cmd = db.CreateQuery();
        cmd.CommandText = "SELECT id FROM accounts WHERE uuid=@uuid";
        cmd.Parameters.AddWithValue("@uuid", query["guid"]);
        object id = cmd.ExecuteScalar();
        if (id != null)
        {
        int amount = int.Parse(query["aid"]);
        cmd = db.CreateQuery();
        cmd.CommandText = "UPDATE stats SET credits = credits + @amount WHERE accId=@accId";
                cmd.Parameters.AddWithValue("@accId", (int) id);
                cmd.Parameters.AddWithValue("@amount", amount);
                int result = cmd.ExecuteNonQuery();
                if (result > 0)
                    status = "400";
                else
                    status = "500";
           }
            else
               status = "404";
        }
        byte[] res = Encoding.UTF8.GetBytes(
             status);
        Context.Response.OutputStream.Write(res, 0, res.Length);
    }
}
4

3 に答える 3

1

ID の前に (int) があることに気付きましたが、必要ないので、ID の前の (int) だけを削除しました。

だから私はこの行を置き換えることができます

cmd.Parameters.AddWithValue("@accId", (int) id);

cmd.Parameters.AddWithValue("@accId", id);
于 2016-08-18T20:51:12.217 に答える
0

あなたが提供した限られた情報に基づいてcmd.Parameters.AddWithValue("@accId", (int) id);、キャストを持つ唯一の行であるため、問題は行にあるようです。

accounts.idデータベースの列の型を確認してください。 ではないINTので、キャスト (括弧内の型) を任意の型に変更する必要があります。ASMALLINTshortC# の a であり、BIGINTis longTINYINTis byte(またはsbyte) であり、ドキュメントを参照して何にMEDIUMINTマップするかを確認する必要がありますが、おそらくint.

于 2016-08-18T20:51:04.407 に答える
0

このエラーが発生している行を推測しています。

id 変数を使用して、オブジェクトから int へのキャストが行われていることがわかります。

以下はあなたの問題を示している可能性があります

    [TestMethod]
    public void ObjectToInt()
    {
        object a = 2;
        object b = "3";
        int aa = (int)a;
        int bb = (int)b; // this throws the same error
        var x = 1;
    }

多分intでintをnull可能にしますか?またはオブジェクトの値が実際に何であるかを確認してください。

お役に立てれば。

于 2016-08-18T20:51:45.933 に答える