unity连接mysql数据库-最新详细

写在前面


版本兼容问题走了许多弯路,令人非常火大。软件的更新,但是配套和支持往往没有跟上,甚至反而不兼容旧版本,而网上多数博客已经不再适用,故执笔记录,希望可以帮助到你。
在这里插入图片描述
相关安装包已上传网盘。
在这里插入图片描述

链接:https://pan.baidu.com/s/16cNlfe8_XTrW4p3HfgLUNQ
提取码:pdy1

Mysql

安装Mysql及相关组件,官网/网盘都可。
https://dev.mysql.com/downloads/
在这里插入图片描述

MySQL Installer for Windows


安装Mysql8.0,已安装可跳过此步,相关教程繁多,不再赘述。
https://dev.mysql.com/downloads/installer/
在这里插入图片描述
在这里插入图片描述

Connector/NET


版本兼容问题,这里用的是v6.3.9
https://downloads.mysql.com/archives/c-net/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

MySQL for Visual Studio


https://dev.mysql.com/downloads/windows/visualstudio/
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

Visual Studio


Visual Studio2022暂不支持Mysql!!!
或者Mysql暂不支持Visual Studio2022!!!
直接劝退到2019

视图->服务器资源管理器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

unity

MySql.Data.dll


unity2020已经内置了System.Data.dll和System.Drawing.dll,只需导入MySql.Data.dll即可。
该文件在前面Connector/NET安装目录下(也已上传网盘),如:
C:\Program Files (x86)\MySQL\MySQL Connector Net 6.3.9\Assemblies\v4.0
在这里插入图片描述

测试脚本


新建两个脚本测试连接:
在这里插入图片描述
SqlAccess.cs

using System;
using System.Data;
using MySql.Data.MySqlClient;
using UnityEngine;
using System.Text;

public class SqlAccess
{
	public static MySqlConnection dbConnection;
	public SqlAccess(string host, string port, string username, string pwd, string database)
	{
		//连接数据库
		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("连接失败!" + e.Message.ToString());
		}
	}

	//关闭连接
	public void Close()
	{
		if (dbConnection != null)
		{
			dbConnection.Close();
			dbConnection.Dispose();
			dbConnection = null;
		}
	}

	//查询
	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());
	}

	//执行sql语句
	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;
	}
}

TestSql.cs

using System.Data;
using UnityEngine;

public class TestSql : MonoBehaviour
{
    public string host = "localhost";
    public string port = "3306";
    public string username = "root";
    public string pwd = "123456";
    public string database = "demo";
    void Start()
    {
        SqlAccess sql = new SqlAccess(host, port, username, pwd, database);

        string[] items = { "name" };//字段名
        string[] col = { };
        string[] op = { };
        string[] val = { };
        DataSet ds = sql.SelectWhere("test", items, col, op, val);//替换表名test

        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);
            }
        }
    }
}

测试结果


在这里插入图片描述
新建GameObject,将TestSql脚本绑定上去,记得修改TestSql密码数据库名字段名等。
在这里插入图片描述
运行测试:
在这里插入图片描述

原创不易,请勿转载本不富裕的访问量雪上加霜
博主首页:https://wzlodq.blog.csdn.net/
来都来了,不评论两句吗👀
如果文章对你有帮助,记得一键三连❤

### Unity连接MySQL数据库最新详细教程 #### 准备工作 为了使Unity能够与MySQL数据库交互,需先准备必要的环境配置。确保已安装MySQL服务器并创建好目标数据库[^1]。 #### 添加MySQL驱动程序到项目中 在Unity环境中实现与MySQL的数据通信,首要步骤是在项目内引入`MySql.Data.dll`文件。此DLL充当C#代码同MySQL之间的桥梁。如果随MySQL安装包未提供该文件,则可从网络资源获取,并将其放置于项目的`Assets/Plugins`目录下以便后续调用。 ```csharp using MySql.Data.MySqlClient; ``` 这段代码展示了如何通过命名空间来访问MySQL客户端类库中的成员函数和对象,从而简化了之后编写SQL查询语句的工作量。 #### 配置连接字符串 建立至MySQL服务端的安全链接至关重要。下面给出了一条典型的用于本地测试环境下的连接串实例: ```plaintext string constr = "Database=zzz;Data Source=127.0.0.1;user=root;Password=123456;pooling=false;charset=utf8;port=3306"; ``` 这里定义了一系列参数用来指定要访问的具体数据库名称(`Database`)、主机地址(`Data Source`)、登录凭证(用户名`user`及密码`Password`)、字符编码集以及监听端口号等信息。值得注意的是关闭SSL验证可能暂时解决问题但并非长久之计;建议尝试调整服务器设置或更新客户端驱动版本以彻底消除潜在风险[^2]。 #### 编写数据操作逻辑 完成上述准备工作后就可以着手开发具体的应用功能模块了。比如执行简单的增删改查(CRUD)操作: ```csharp public class DatabaseManager : MonoBehaviour { private MySqlConnection connection; void Start() { try{ connection = new MySqlConnection(constr); connection.Open(); Debug.Log("Connection Successful!"); MySqlCommand cmd = new MySqlCommand("SELECT * FROM table_name", connection); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()){ // Process each row here... } reader.Close(); }catch(Exception e){ Debug.LogError(e.Message); }finally{ if(connection != null && connection.State == System.Data.ConnectionState.Open) connection.Close(); } } } ``` 以上脚本片段示范了一个基本的操作流程——打开会话通道->发送请求指令->处理返回结果->断开连接。其中包含了异常捕获机制确保即使发生错误也能安全释放占用资源。
评论 87
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾仄lo咚锵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值