Используя MySQL в Unity3d, Fill Datatable - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь просто заполнить таблицу данных, но это вызывает замораживание в течение определенного времени и выдает следующее исключение:

Попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом через определенный промежуток времени или установила соединениене удалось, потому что подключенный хост не смог ответить.

Возможно, что-то не так, но если ошибки нет, возможно, это на стороне Unity

//open connection to database
private bool OpenConnection()
{
    try
    {
        connection.Open();
        return true;
    }
    catch (MySqlException ex)
    {
        //0: Cannot connect to server.
        //1045: Invalid user name and/or password.
        switch (ex.Number)
        {
            case 0:
                Debug.Log("Cannot connect to server.  Contact administrator");
                break;

            case 1045:
                Debug.Log("Invalid username/password, please try again");
                break;
        }
        Debug.Log("error : " + ex.Number + " | " + ex.Message);
        return false;
    }
}

//Close connection
private bool CloseConnection()
{
    try
    {
        connection.Close();
        return true;
    }
    catch (MySqlException ex)
    {
        Debug.Log(ex.Message);
        return false;
    }
}   

public DataTable SendQueryAndReceiveResult(string query)
{
    try
    {
        MySqlCommand cmd = new MySqlCommand(query, connection);
        MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
        DataTable dataTable = new DataTable();

        if (OpenConnection() == true)
        {
            adapter.Fill(dataTable);

            CloseConnection();
            Debug.Log("Succesfully send and receive the table from query : \n" + query);
            return dataTable;
        }
    }
    catch (System.Exception ex)
    {
        Debug.LogError("ERROR when sending and receiving the table from query : \n" + query);
        Debug.LogError(ex.Message);
        return null;
    }

    Debug.LogError("ERROR when sending and receiving the table from query : \n" + query);
    return null;
}

1 Ответ

0 голосов
/ 28 октября 2019

Вы не можете использовать блокирующий драйвер IO MySQL C # внутри Unity, потому что есть только один поток игрока. Кроме того, вам необходимо разрешить соединения с брандмауэром.

Начните с использования неблокирующего (асинхронного) драйвера, например this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...