c#请求处理错误系统.InvalidCastException:指定的类型转换无效
本文关键字:类型转换 无效 请求处理 错误 系统 InvalidCastException | 更新日期: 2023-09-27 18:03:12
当我尝试执行此函数时,我得到了错误"系统。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作为我的电子邮件地址,参数aid用数字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);
}
}
我注意到我在id之前有(int),但它不需要,所以我只删除了id之前的(int)。
所以我可以替换这行
cmd.Parameters.AddWithValue("@accId", (int) id);
cmd.Parameters.AddWithValue("@accId", id);
根据您提供的有限信息,看起来问题出在cmd.Parameters.AddWithValue("@accId", (int) id);
行,因为这是唯一有强制转换的行。
检查数据库中accounts.id
列的类型,我怀疑它不是INT
,因此您需要将cast(括号中的类型)更改为任何类型。SMALLINT
是c#中的short
, BIGINT
是long
, TINYINT
是byte
(或sbyte
),您需要查看文档以查看MEDIUMINT
映射到的内容,但可能是int
。
我猜是哪一行抛出这个错误。
我可以看到id变量从object到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使整型可为空?或者看看object的值到底是多少。