Сбой функции соединения Unity для Android MySQL: индекс находился за пределами массива - PullRequest
0 голосов
/ 01 января 2019

У меня есть класс для обработки всех взаимодействий базы данных между клиентом и базой данных (MySQL) (я знаю и понимаю, что не должен разрешать прямой доступ к базе данных)

public T getDatabaseValue<T>(string value, string query)
{
    try
    {
        connection = new MySqlConnection(connectionString);
        connection.Open();
        command = new MySqlCommand(query, connection);
        MySqlDataReader reader = command.ExecuteReader();
        if (reader.Read())
        {
            return (T)reader[value];
        }
        else
            return default(T);
    }
    catch (MySqlException SQLex)
    {
        Debug.Log("Database get failed (SQL Exception), query: " + query);
        Debug.Log("Exception Message: " + SQLex.Message);   
        return default(T);
    }
    catch (System.Exception ex)
    {
        Debug.Log("Database get failed (System Exception), query: " + query);
        Debug.Log("Exception Message: " + ex.Message);
        return default(T);
    }
}

Это работаетбез нареканий в редакторе.При сборке и запуске на Android я получаю это сообщение об ошибке через монитор:

01-01 15:21:14.141: I/Unity(23761): (Filename: ./Runtime/Export/Debug.bindings.h Line: 43)
01-01 15:21:14.829: I/Unity(23761): Database get failed (System Exception), query: SELECT MAX(DT_Stamp) FROM tbl_Store;
01-01 15:21:14.829: I/Unity(23761):  
01-01 15:21:14.829: I/Unity(23761): (Filename: ./Runtime/Export/Debug.bindings.h Line: 43)
01-01 15:21:14.829: I/Unity(23761): Exception Message: Index was outside the bounds of the array.

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

    DateTime DB_Date = getDatabaseValue<DateTime>("MAX(DT_Stamp)", "SELECT MAX(DT_Stamp) FROM tbl_Store;");

Вот содержимое tbl_Store:

(Item_ID (int)), (Item_Name (varchar))), (Item_Price (float)), (In_Use (bit)), (DT_Stamp (datetime))

4 Hero Upgrade #1 100 1 2018-12-11 09:53:14 
5 Hero Upgrade #2 300 1 2018-12-11 09:53:14 
6 Hero Upgrade #3 700 1 2018-12-11 09:53:14 

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

01-01 17:23:48.307: E/Unity(10476): IndexOutOfRangeException: Index was outside the bounds of the array. 
01-01 17:23:48.307: E/Unity(10476): at System.Diagnostics.TraceInternal.get_AppName () [0x0000e] in <ac210d81537245bc838518cc8e845861>:0 
01-01 17:23:48.307: E/Unity(10476): at System.Diagnostics.TraceInternal.TraceEvent (System.Diagnostics.TraceEventType eventType, System.Int32 id, System.String format, System.Object[] args) [0x0003d] in <ac210d81537245bc838518cc8e845861>:0 
01-01 17:23:48.307: E/Unity(10476): at System.Diagnostics.Trace.TraceError (System.String message) [0x00000] in <ac210d81537245bc838518cc8e845861>:0 
01-01 17:23:48.307: E/Unity(10476): at MySql.Data.MySqlClient.MySqlTrace.LogError (System.Int32 id, System.String msg) [0x00028] in <326e9aab93854e739606c3572c385a34>:0 
01-01 17:23:48.307: E/Unity(10476): at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver () [0x00031] in <326e9aab93854e739606c3572c385a34>:0 
01-01 17:23:48.307: E/Unity(10476): at MySql.Data.MySqlClient.MySqlPool.GetConnection () [0x0001c] in <326e9aab93854e739606c3572c385a34>:0 
01-01 17:23:48.307: E/Unity(10476): at MySql.Data.MySqlClient.MySqlConnection.Open () [0x000f3] in <326e9aab93854e739606c3572c385a34>:0 
01-01 17:23:48.307: E/Unity(10476): at texttest1.Start () [0x00011] in <dd75ac8e3f854a97ac132dae6ec658fd>:0

Я, вероятно, упускаю что-то очень простое здесь, но любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Я нашел ответ:

Чтобы внешнее устройство Android могло обмениваться данными, вам нужно добавить I18N.dll и I18N.West.dll к своим ресурсам, в этом разница между ними, работающими в Unity.Редактор и Android APK.

0 голосов
/ 01 января 2019

Нет ничего названного таким образом (MAX(DT_Stamp)) в наборе результатов.Я хотел бы использовать AS name в вашем предложении проекции и ссылаться на него таким образом.

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