2016-08-18 69 views
-1

當我嘗試執行此函數時,出現錯誤 「System.InvalidCastException:指定的強制轉換無效。」C#請求處理程序錯誤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作爲我的電子郵件地址和參數的援助與它的頭號參數來執行它。

請幫助我,我一直試圖整天修復它。

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 [email protected]"; 
     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 [email protected]"; 
       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); 
    } 
} 
+2

哪一行是拋出異常?我不會計算'時間:) – SledgeHammer

+0

@LaneL你可以,如果它確實是一個盒裝詮釋。如果OP無法告訴我們什麼是線路拋出異常,那麼猜測什麼是問題是沒有意義的。 – Jakotheshadows

回答

1

根據您所提供的信息有限,它看起來像問題是與線cmd.Parameters.AddWithValue("@accId", (int) id);,因爲這是與鑄造中唯一的一行。

檢查您的數據庫中accounts.id列的類型,我懷疑它是不是一個INT,所以你需要改變投(括號內的類型)這是什麼類型。一個SMALLINT是C#中的shortBIGINTlongTINYINTbyte(或sbyte),並且你需要看的文件,看看有什麼MEDIUMINT地圖,但它可能int

1

我注意到我有(int)在id之前,但它不是必需的,所以我只在ID之前刪除了(int)。

這樣我就可以

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

該行折騰這個錯誤我猜替換該行

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

我可以看到從你的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可空與詮釋?或者看看對象的價值究竟是什麼。

希望這會有所幫助。

相關問題