C# 值太大

C# 值太大,c#,sql,unity3d,C#,Sql,Unity3d,我试图用SQL做一个插件,但我遇到了一些错误,我不知道该怎么处理它们。SQL数据库管理器+从主类添加播放器 private void Events_OnPlayerConnected(UnturnedPlayer player) { FriendsGroupID_t id; id.m_FriendsGroupID = (short)player.SteamGroupID.m_SteamID; Databa

我试图用SQL做一个插件,但我遇到了一些错误,我不知道该怎么处理它们。SQL数据库管理器+从主类添加播放器

  private void Events_OnPlayerConnected(UnturnedPlayer player)
        {
            FriendsGroupID_t id;
            id.m_FriendsGroupID = (short)player.SteamGroupID.m_SteamID;
            Database.addPlayer(player.CharacterName, player.SteamName, SteamFriends.GetFriendsGroupName(id), player.CSteamID.m_SteamID.ToString());
        }
其他代码:

using System;
using I18N.West;
using MySql.Data.MySqlClient;
using Rocket.Core.Logging;
using Steamworks;

namespace SQLPlayer
{

    internal class DatabaseController
    {

        private MySqlConnection createConnection()
        {
            MySqlConnection Connection = null;
            try
            {
                if (SQLPlayer.Instance.Configuration.Instance.DatabasePort == 0)
                {
                    SQLPlayer.Instance.Configuration.Instance.DatabasePort = 3306;
                }
                Connection = new MySqlConnection(string.Format("SERVER={0};DATABASE={1};UID={2};PASSWORD={3};PORT={4};", new object[]
                {
                    SQLPlayer.Instance.Configuration.Instance.DatabaseAddress,
                    SQLPlayer.Instance.Configuration.Instance.DatabaseName,
                    SQLPlayer.Instance.Configuration.Instance.DatabaseUsername,
                    SQLPlayer.Instance.Configuration.Instance.DatabasePassword,
                    SQLPlayer.Instance.Configuration.Instance.DatabasePort
                }));
            }
            catch (Exception) { }
            return Connection;
        }


        public DatabaseController()
        {
            new CP1250();
            CheckSchema();
        }


        internal void CheckSchema()
        {
            try
            {
                MySqlConnection mySqlConnection = createConnection();
                MySqlCommand mySqlCommand = mySqlConnection.CreateCommand();
                mySqlCommand.CommandText = "show tables like '" + SQLPlayer.Instance.Configuration.Instance.LogTableName + "'";
                mySqlConnection.Open();
                if (mySqlCommand.ExecuteScalar() == null)
                {
                    mySqlCommand.CommandText = "CREATE TABLE `" + SQLPlayer.Instance.Configuration.Instance.LogTableName + "` ( `id` INT NOT NULL AUTO_INCREMENT , `player_display_name` TEXT NOT NULL , `player_steam_name` TEXT NOT NULL ,`player_steamgroup_name` TEXT NOT NULL , `player_steam_id` INT NOL NULL , `sent_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`id`));";
                    mySqlCommand.ExecuteNonQuery();
                }
                mySqlConnection.Close();
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
            }
        }

        // Token: 0x06000006 RID: 6 RVA: 0x00002250 File Offset: 0x00000450
        public void addPlayer(string charactername, string steamname , string steamgroupname , int steamid)
        {
            try
            {
                MySqlConnection mySqlConnection = createConnection();
                MySqlCommand mySqlCommand = mySqlConnection.CreateCommand();
                mySqlCommand.Parameters.AddWithValue("@steamname", steamname);
                mySqlCommand.Parameters.AddWithValue("@charactername", charactername);
                mySqlCommand.Parameters.AddWithValue("@steamgroupname", steamgroupname);
                mySqlCommand.Parameters.AddWithValue("@steamid", steamid);
                string commandText = "insert into `" + SQLPlayer.Instance.Configuration.Instance.LogTableName + "` (`player_display_name` , `player_steam_name`,`player_steamgroup_name`,`player_steam_id`) values(@charactername,@steamname , @steamgroupname ,@steamid);";
                mySqlCommand.CommandText = commandText;
                mySqlConnection.Open();
                mySqlCommand.ExecuteNonQuery();
                mySqlConnection.Close();
            }
            catch (Exception) { }
        }


        public void DeletePlayers()
        {
            try
            {
                MySqlConnection mySqlConnection = createConnection();
                MySqlCommand mySqlCommand = mySqlConnection.CreateCommand();
                DateTime dateTime = DateTime.Now.AddDays(-SQLPlayer.Instance.Configuration.Instance.DeleteAfterDays);
                mySqlCommand.Parameters.AddWithValue("@days", dateTime);
                string commandText = "DELETE FROM " + SQLPlayer.Instance.Configuration.Instance.LogTableName + " WHERE `last_login` > @date; ";
                mySqlCommand.CommandText = commandText;
                mySqlConnection.Open();
                mySqlCommand.ExecuteNonQuery();
                mySqlConnection.Close();
            }
            catch (Exception) { }
        }
    }
}
这是我调用函数时遇到的错误
addPlayer

 Error in MulticastDelegate PlayerConnected: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.OverflowException: Value is too large
  at System.Int16.Parse (System.String s) [0x00000] in <filename unknown>:0 
  at SQLPlayer.SQLPlayer.Events_OnPlayerConnected (Rocket.Unturned.Player.UnturnedPlayer player) [0x00000] in <filename unknown>:0 
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0 
  at System.Delegate.DynamicInvokeImpl (System.Object[] args) [0x00000] in <filename unknown>:0 
  at System.MulticastDelegate.DynamicInvokeImpl (System.Object[] args) [0x00000] in <filename unknown>:0 
  at System.Delegate.DynamicInvoke (System.Object[] args) [0x00000] in <filename unknown>:0 
  at Rocket.Core.Extensions.MulticastDelegateExtension.TryInvoke (System.MulticastDelegate theDelegate, System.Object[] args) [0x00000] in <filename unknown>:0 
多播代理播放机连接中出错:System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.OverflowException:值太大
在:0中的System.Int16.Parse(System.String s)[0x00000]处
在SQLPlayer.SQLPlayer.Events\u OnPlayerConnected(Rocket.Unturned.Player.UnturnedPlayer)[0x00000]中:0
at(包装器管理到本机)System.Reflection.monethod:InternalInvoke(对象,对象[],System.Exception&)
在System.Reflection.MonMethod.Invoke(System.Object obj、BindingFlags invokeAttr、System.Reflection.Binder Binder、System.Object[]参数、System.Globalization.CultureInfo区域性)[0x00000]中:0
---内部异常堆栈跟踪的结束---
在System.Reflection.MonMethod.Invoke(System.Object obj、BindingFlags invokeAttr、System.Reflection.Binder Binder、System.Object[]参数、System.Globalization.CultureInfo区域性)[0x00000]中:0
在System.Reflection.MethodBase.Invoke(System.Object obj,System.Object[]参数)[0x00000]中:0
位于:0中的System.Delegate.DynamicInvokeImpl(System.Object[]args)[0x00000]处
位于:0中的System.MulticastDelegate.DynamicInvokeImpl(System.Object[]args)[0x00000]处
在0中的System.Delegate.DynamicInvoke(System.Object[]args)[0x00000]处
在Rocket.Core.Extensions.multicast delegateextension.TryInvoke(System.multicast delegate theDelegate,System.Object[]args)[0x00000]中:0

您的问题是这一行:

id.m_FriendsGroupID = (short)player.SteamGroupID.m_SteamID;

m_-SteamID
值可能是
int
,太大,无法放入
short
类型的变量中。这里最好的解决方案是确保
id.m\u FriendsGroupID
也是
int
类型,并删除对
short
的强制转换。您的问题是这一行:

id.m_FriendsGroupID = (short)player.SteamGroupID.m_SteamID;

m_-SteamID
值可能是
int
,太大,无法放入
short
类型的变量中。这里最好的解决方案是确保
id.m\u FriendsGroupID
也是
int
类型,并将强制转换删除到
short

您的例外情况出现在
Events\u OnPlayerConnected
中,而不是在
addPlayer
中。堆栈跟踪告诉您这一点。错误很明显,您试图将一个太大而无法容纳Int16的数字填充到Int16中。你可能需要一个Int32(
int
)甚至一个Int64(
long
)@DavidG我需要做什么?@Plugin4U不知道,你没有向我们展示导致问题的代码……你绝对确定
player.streamgroupid.m\u streamid
将包含在
short
变量中吗?因为这就是您的错误所在。您的异常出现在
事件\u OnPlayerConnected
中,而不是
addPlayer
中。堆栈跟踪告诉您这一点。错误很明显,您试图将一个太大而无法容纳Int16的数字填充到Int16中。你可能需要一个Int32(
int
)甚至一个Int64(
long
)@DavidG我需要做什么?@Plugin4U不知道,你没有向我们展示导致问题的代码……你绝对确定
player.streamgroupid.m\u streamid
将包含在
short
变量中吗?因为这就是你的错误所在。非常感谢你,大卫!私有无效事件\u OnPlayerConnected(UnturnedPlayer player){FriendsGroupID\u t id;id.m\u FriendsGroupID=Convert.ToInt16(player.streamGroupId.m\u streamId);Convert.ToInt32(player.CSteamID.m\u streamId);}您仍在尝试转换为短(Convert.ToInt16),只需将其保留为int或long。非常感谢david!私有无效事件\u OnPlayerConnected(UnturnedPlayer-player){FriendsGroupID\u t id;id.m\u FriendsGroupID=Convert.ToInt16(player.streamgroupid.m\u streamid);Convert.ToInt32(player.CSteamID.m\u streamid);}您仍在尝试转换为短(Convert.ToInt16),只需将其保留为int或long即可。