c# - Unity Android MySQL连接功能失败:索引超出数组范围
问题描述
我有一个类来处理客户端和数据库(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 上构建和运行时,我通过 Monitor 收到此错误消息:
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
我可能在这里遗漏了一些非常简单的东西,但任何帮助将不胜感激!
解决方案
我找到了答案:
为了让 Android 设备与外部通信,您需要将 I18N.dll 和 I18N.West.dll 添加到您的资产中,这是它在 Unity 编辑器和 Android APK 中工作的区别。
推荐阅读
- apache-spark - 如何在没有下载 hive 的情况下连接到远程 Hive 服务器?
- sql - columnA 的总和,其中另一个 columnB 是特定值而不显示 columnB
- c# - 程序未根据案例陈述产生预期结果
- javascript - “今天”视图上的 buttonText 未更新
- python - Python:删除谷歌视觉 api 中的垂直和水平线
- sitefinity - 如何关闭分页?
- gnupg - 我正在尝试解密给定 .asc 文件的 .pgp 文件
- npm - 使用 Yarn 或 NPM 安装全局包有什么区别吗?
- html - 在 CSS 网格中将元素移到列外
- sql-server - 用 Clob 字段中的另一个文本替换文本