![](/img/trans.png)
[英]System.InvalidCastException: 'Specified cast is not valid.' C# MYSQL
[英]C# System.InvalidCastException: 'Specified cast is not valid.' When using MySQL with Discord.Net
我一直在得到可怕的錯誤:D
public static List<tableName> GetUserStatus(IUser user)
{
var result = new List<tableName>();
var database = new Database("dibot");
var str = string.Format("SELECT * FROM dibott WHERE userid = '{0}'", user.Id);
var tableName = database.FireCommand(str);
while (tableName.Read())
{
var userId = (string)tableName["userid"];
var userName = (string)tableName["username"];
var currentTokens = (int)tableName["tokens"]; // Here
result.Add(new tableName
{
userid = userId,
username = userName,
tokens = currentTokens
});
}
database.CloseConnection();
return result;
}
在此命令
[Command("Status")]
[Alias("status", "s")]
public async Task Status([Remainder] IUser user = null)
{
var embed = new EmbedBuilder()
{
Color = new Color(0, 0, 255)
};
if (user == null)
{
user = Context.User;
}
var result = Database.CheckExistingUser(user); //Here
if (result.Count() <= 0)
{
Database.EnterUser(user);
}
var tableName = Database.GetUserStatus(user);
我已經嘗試了一切,請幫忙。 我嘗試了很多事情。 什么都沒有幫助尋求幫助,因為即時通訊出於想法和互聯網的存在,我沒有進行任何修復//以查看錯誤在哪里。 希望我能盡快得到幫助! :)
因此,有問題的行是這樣的:
var currentTokens = (int)tableName["tokens"];
InvalidCastException
表示tableName["tokens"]
包含的類型不是 int
。 要獲得實際的類型,您可以例如刪除強制轉換,在該行上放置一個斷點,然后與調試器進行檢查。
根據您的評論,我們知道數據庫類型是varchar,這意味着您需要在.NET中使用字符串:
var currentTokens = (string)tableName["tokens"];
因為您將令牌轉換為int
im並假定其為數字列。
如果您有TINYINT
則使用byte
;如果其未簽名,則使用ubyte
如果您有SMALLINT
則使用short
,如果未簽名,則使用ushort
如果您有MEDIUMINT/INT
則將int
或uint
用作未簽名
如果您有BIGINT
則將long
或ulong
用於未簽名
找出tableName["tokens"].GetType()
最佳方法是執行tableName["tokens"].GetType()
。
如果您不將其轉換為正確的類型,則將收到該InvalidCast
異常
編輯:
根據您的評論,它的varchar
列表示它是一個字符串。 如果要使其為整數,則需要
int.Parse((string) tableName["tokens"]);
要么
long.Parse((string) tableName["tokens"]);
如果它是64位int
但是,將數字存儲為字符串格式並隨后再次解析它確實是一個糟糕的設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.