重新梳理一下这篇帖子,并且就后续的一些问题提供一些思路与见解。

本文章涉及Unity 3D版本:2020.3.20f1、MySQL5.7。(经过亲测,2019-2022均适用)

1.作为初学者时期,发现与解决Unity连接MySQL问题的经过

前期为了让Unity连接MySQL,参考了许多帖子,瞎琢磨,安装了下图中的各包,其中MySQL-connector-net/-for-visualstudio的版本分别为8.0.27/1.2.10。

参考帖子1:Unity连接Mysql数据库_Jessica的博客-CSDN博客_unity连接mysql数据库

这篇帖子,给了我很多指引,但也让我走了许多误区。我这使用的是2020版本,其中System.Data.dll和System.Drawing.dll在该版本中是内置的,所以导入这两个文件时,Unity会提示版本不对,dll重复的错误,如下图

导入MySql.Data.dll时也会出现许多错误,并且不同的版本,错误还不同!由于MySQL-connector-net版本我装的是8.0.27,里面的文件版本如下图:有net5.0/netstandard2.0/netstandard2.1/v4.5.2/v4.8

其中,不同版本的MySql.Data.dll所提示的错误也会有差异,如图:

后续报错就不一一例举了。参考了许多帖子,当时就在想,既然不同版本的dll,报错还不同,那这大概率是dll版本不匹配的问题了,所以就挨个试版本,整个包的版本都试完了,都没解决问题。

这一系列的问题是在查阅到一篇帖子后才明白,Unity在18后续版本已经将这两引用集成到了内置文件中,参考帖子2:Unity2018连接MySQL数据库_ZLX的博客-CSDN博客,根据参考贴,在VS中检查项目引用,如果有System.Data.dll和System.Drawing.dll两文件,就不必添加dll了。

MySql.Data.dll导入报错的问题,在于MySQL-connector-net包的版本过高,Unity不兼容,下载低版本的connector/net包就能解决。根据参考贴,我去甲骨文官网下载了6.3.9版本的包,下载地址:MySQL :: Download MySQL Connector/NET (Archived Versions)(下载时选择需要的版本即可),把6.3.9压缩包解压后,得到的myql.data.dll文件导入Unity2020,之前的错误就完全消失了。

总结一下:

  1. Unity与MySQL的连接,使用MySQL .NET Connector作为连接工具时,需要注意MySQL-connector-net的版本,过高的版本与Unity不兼容,会出现缺失依赖集、无法引用等报错,本文章使用的是6.3.9版本。
  2. 有的帖子有提及System.Data.dll和System.Drawing.dll两个文件,Unity 2018版本后的开发环境不用关注这个,已内置。
  3. (补充说明)把项目工程打包导出后运行,会发现依旧无法连接数据库,这主要是缺失dll导致,导入I18N.CJK.dll/I18N.dll/I18N.MidEast.dll/I18N.West.dll到Plugins就能解决,这几个文件一般在Unity编辑器安装文件夹中,eg:C:\Program Files\Unity\Hub\Editor\2020.3.27f1c1\Editor\Data\MonoBleedingEdge\lib\mono
  4. (注意)这是我后续开发遇到的问题,以上所述,均是连接本地数据库,至于连接远程数据库,经测试,该路线目前我为找到解决方案,文章最后我会提供一些思路。

2.具体的连接代码

1.简单的连接测试版

简单暴力速度,直接挂载脚本运行完事

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MySql.Data.MySqlClient;public class DatabaseConnection : MonoBehaviour
{private MySqlConnection connection;private string server = "服务器地址";private string database = "数据库名称";private string uid = "用户名";private string password = "密码";void Start(){string connectionString = "SERVER=" + server + ";" + "DATABASE=" +database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";connection = new MySqlConnection(connectionString);try{connection.Open();Debug.Log("连接成功!");}catch (MySqlException ex){Debug.Log("连接失败:" + ex.Message);}}void OnApplicationQuit(){if (connection != null){connection.Close();Debug.Log("关闭连接!");}}
}

2.参考其他帖子,附带查询的连接方法

错误消失后,得检擦是否能正常连接MySQL数据库,连接代码我复制的参考贴2里的两个脚本,根据自己数据库的表,改了些许代码,成功实现了数据库连接,效果图如下:

剩下数据库连接的内容,可根据自己数据库实况来写脚本连接检测。我这直接改的参考贴2的代码,下面针对数据库表及代码,给个参考。

自己数据库中表内容:

参考贴2代码——SqlAccess:

using System;
using System.Data;
using MySql.Data.MySqlClient;
using UnityEngine;
using System.Text;public class SqlAccess
{public static MySqlConnection dbConnection;//如果只是在本地的话,写localhost就可以。// static string host = "localhost";  //如果是局域网,那么写上本机的局域网IPstatic string host = "localhost";static string port = "3306";static string username = "root";static string pwd = "admin";static string database = "mygamedb";public SqlAccess(){OpenSql();}/// <summary>/// 连接数据库/// </summary>public static void OpenSql(){try{string connectionString = string.Format("server = {0};port={1};database = {2};user = {3};password = {4};", host, port, database, username, pwd);Debug.Log(connectionString);dbConnection = new MySqlConnection(connectionString);dbConnection.Open();Debug.Log("建立连接");}catch (Exception e){throw new Exception("服务器连接失败,请重新检查是否打开MySql服务。" + e.Message.ToString());}}/// <summary>/// 关闭数据库连接/// </summary>public void Close(){if (dbConnection != null){dbConnection.Close();dbConnection.Dispose();dbConnection = null;}}/// <summary>/// 查询/// </summary>/// <param name="tableName">表名</param>/// <param name="items"></param>/// <param name="col">字段名</param>/// <param name="operation">运算符</param>/// <param name="values">字段值</param>/// <returns>DataSet</returns>public DataSet SelectWhere(string tableName, string[] items, string[] col, string[] operation, string[] values){if (col.Length != operation.Length || operation.Length != values.Length)throw new Exception("col.Length != operation.Length != values.Length");StringBuilder query = new StringBuilder();query.Append("SELECT ");query.Append(items[0]);for (int i = 1; i < items.Length; ++i){query.Append(", ");query.Append(items[i]);}query.Append(" FROM ");query.Append(tableName);query.Append(" WHERE 1=1");for (int i = 0; i < col.Length; ++i){query.Append(" AND ");query.Append(col[i]);query.Append(operation[i]);query.Append("'");query.Append(values[0]);query.Append("' ");}Debug.Log(query.ToString());return ExecuteQuery(query.ToString());}/// <summary>/// 执行sql语句/// </summary>/// <param name="sqlString">sql语句</param>/// <returns></returns>public static DataSet ExecuteQuery(string sqlString){if (dbConnection.State == ConnectionState.Open){DataSet ds = new DataSet();try{MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection);da.Fill(ds);}catch (Exception ee){throw new Exception("SQL:" + sqlString + "/n" + ee.Message.ToString());}finally{}return ds;}return null;}
}

参考贴2代码——TestSql:把这个脚本挂在到场景物体中,即可执行。

using System.Data;
using UnityEngine;public class TestSql : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){SqlAccess sql = new SqlAccess();string[] items = { "idrole", "name", "level", "roletype", "userid"};//更改元素,与自己表对应string[] col = { };string[] op = { };string[] val = { };DataSet ds = sql.SelectWhere("role", items, col, op, val);//读取表,此处把表名改为自己需要查询的表if (ds != null){DataTable table = ds.Tables[0];foreach (DataRow row in table.Rows){string str = "";foreach (DataColumn column in table.Columns)str += row[column] + " ";Debug.Log(str);}}}
}

3.MySQL .NET Connector方法未能解决远程数据库连接的问题

该篇帖子内容均是基于连接本地数据库所撰写,个人在后续的项目实践中,一直未能实现 .NET Connector方法的远程数据库连接,在同一本地服务器中,我使用MySQL 客户端或其他工具尝试连接到远程数据库,均没有问题,但在Unity中就不能实现对远程数据库的连接。个人猜测Unity 可能对网络连接做了一些限制,致使该方案无法直接连接远程数据库。

在经过多次尝试无果后,我这更换了技术路线,使用PHP+MySQL的技术路线成功解决了连接远程数据库的问题。如果有需要,我后续再分享PHP连接MySQL的经验与案例。

Unity2020连接MySQL数据库相关推荐

  1. .net连接mysql数据_.net连接MYSQL数据库的方法及示例!

    连接MYSQL数据库的方法及示例 方法一: 使用MYSQL推出的MySQL Connector/Net is an ADO.NET driver for MySQL 该组件为MYSQL为ADO.NET ...

  2. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  3. python用django连接mysql_三分钟了解Django如何连接Mysql数据库

    处理用户注册请求.Django连接MysqL数据库相关配置.数据库迁移命令: my_Dproject/app01/views.py    在views函数文件中添加register函数,来处理用户注册 ...

  4. eclipselink mysql_Eclipse连接MySQL数据库(傻瓜篇)

    Eclipse连接MySQL数据库(傻瓜篇) 本来不想写这么简单人文章,在百度上搜索我这个标题,完全符合标题的一大堆.但我按照那些文章捣鼓了很久,就是不行. 我的环境:MySQL:mysql-esse ...

  5. Linux JSP连接MySQL数据库

    Linux(Ubuntu平台)JSP通过JDBC连接MySQL数据库,与Windows平台类似,步骤如下: 下载 jdbc: mysql-connector-java-5.1.18.tar.gz 解压 ...

  6. python使用PyMySQL的连接MySQL数据库

    如何实现将100000条数据插入到MySQL数据库?如果使用MySQL客户端来完成这个操作,那么这个工作量无疑是巨大的,可以通过使用程序代码的方式去连接MySQL数据库,然后对MySQL数据库进行增删 ...

  7. python3连接mysql,python3连接MySQL数据库实例详解

    本文实例为大家分享了python3连接MySQL数据库的具体代码,供大家参考,具体内容如下 #python3连接MySQL实例 import pymysql """导入连 ...

  8. java linux mysql数据库_Linux Java连接MySQL数据库

    Linux(Ubuntu平台)Java通过JDBC连接MySQL数据库,与Windows平台类似,步骤如下: 解压 jdbc: tar -zxvf mysql-connector-java-5.1.1 ...

  9. 【Java】Java连接Mysql数据库的demo示例

    [Java]Java连接Mysql数据库的demo示例 1.安装mysql数据库 2.下载java-mysql-connector.jar包 3.完成java配置 4.写java代码运行测试 1.安装 ...

最新文章

  1. TypeError: ‘instancemethod‘ object has no attribute ‘__getitem__‘
  2. 终极方案!解决正确设置LaunchImage后仍然不显示的问题
  3. Android中的常量 DEFAULT_KEYS_SHORTCUT
  4. java jdk缓存-128~127的Long与Integer
  5. 【体验】感谢朋友雪中送炭寄来的便携示波器,便携示波器开箱体验
  6. vs中imshow函数报错_Win7下VS2010中配置Opencv2.4.4的方法(32位和64位都有效)(亲测成功)...
  7. Signal Slot in Qt
  8. python数据清理的实践总结_Python数据清洗实践
  9. STM32之ADC多通道连续例程
  10. 计算机应用与基础进制,计算机应用基础选择题-删进制、字符题(2).docx
  11. PostgreSQL / openGauss 数据库易犯的十个错误
  12. DEEPNOVA 技术荟系列公开课回顾:释放海量数据价值,尽显数据智能之美
  13. 【Excel】多条件查找
  14. 一道笔试题的解法和联想
  15. JPA、JTA、XA相关索引
  16. matlab卷积不从0开始,matlab 编辑卷积出错
  17. 宅男福利!20行Python代码,一网打尽B站小姐姐的直播信号源!
  18. 10个可以为你的网页设计提供创造灵感的设计资源网站
  19. 什么是生物质发电?生物质发电有哪些方法?
  20. win10搭建openvpn以及使用

热门文章

  1. mysqldump 每日定时备份
  2. freenas 蜗牛星际_蜗牛星际与开源NAS “Rockstor”初体验
  3. 原生html5网页设计,HTML5网页设计教程
  4. 【基于unity制作的游戏】《ZERO:天元》
  5. 今天面了个字节拿38K出来的,真是砂纸擦屁股,给我露一手
  6. 价值投资:利用历史财务报表信息区分赢家和输家
  7. 从手机丢失看数据安全
  8. php ffmpeg截图,PHP调用ffmpeg对视频截图并拼接脚本
  9. Markdown修改字体颜色
  10. 程序员的100个小秘密