unity读取mysql5.7版本示例

使用了miniexcel插件,与mydata.dll 。

csharp 复制代码
using MiniExcelLibs;
using MySql.Data.MySqlClient;
using System.Collections.Generic;
using System.Data;
using System.Text;
using UnityEngine;

public class LoadMySQL_虚拟仿真 : DataLayerBase<Dictionary<string, string>>
{
    public static LoadMySQL_虚拟仿真 Ins;
    string server = "192.169.4.102";
    string database = "avatar_model";
    string user = "model";
    string password = "avatar@model";
    MySqlConnection connection;
    string SQL = @"SELECT {0} FROM {1}";
    string SetMysql =@"
UPDATE {1}
SET {0} = '{2}'
WHERE {0} = '{0}';
";
    public class XNFZ_Data
    {
        public string TagName { get; set; }
        public string DataType { get; set; }
        public string ReadWrite { get; set; }
        public string ScanRate_ms { get; set; }
        public string Description { get; set; }
        public string Value { get; set; }
    }
    List<string> sqlList = new List<string>();
    public static Dictionary<string, XNFZ_Data> XNFZ_keyValues = new Dictionary<string, XNFZ_Data>();
    protected override void Awake()
    {
        base.Awake();
        Ins = this;
        LoadExcel(Application.streamingAssetsPath + "/宁波数据展示点位V3.xlsx", "IDEAS");
        joinFind();

        foreach (var item in XNFZ_keyValues)
        {
            sqlList.Add(item.Key);
        }

    }
    protected override void RequestData(ref Dictionary<string, string> Data)
    {
        if (XNFZ_keyValues.Count > 0)
        {
            StringBuilderSQL(sqlList, "model_data_display_point");

        }

    }
    public void SetDataValue_修改数据库字段值(string tagname,string value)
    {
       // SetMysql = string.Format(SetMysql,);
    }
    void joinFind()
    {
        string sqlSer = "server = " + server + ";" + "Database =" + database + ";" +
                        "user =" + user + ";" +
                        "password =" + password;
        connection = new MySqlConnection(sqlSer);


        try
        {
            connection.Open();
            Debug.Log("数据库连接成功!!!!!");
        }
        catch (System.Exception e)
        {
            Debug.LogError("数据库连接失败" + e.Message);
            return;
        }
        if (connection.State != ConnectionState.Open)
            return;


    }

    void StringBuilderSQL(List<string> sqlList, string sqlcharname)
    {
        StringBuilder sql = new StringBuilder();
        StringBuilder queryTagName = new StringBuilder();
        for (int i = 0; i < sqlList.Count; i++)
        {
            queryTagName.Append(sqlList[i]);
            queryTagName.Append(",");
        }
        queryTagName.Remove(queryTagName.Length - 1, 1);
        sql.Append(string.Format(SQL, queryTagName, sqlcharname));
      
        DataSet ds = Query(sql.ToString());
        if (ds != null && ds.Tables.Count > 0)
        {

            for (int i = 0; i < sqlList.Count; i++)
            {

                string sqlTagName = ds.Tables[0].Rows[0][sqlList[i]].ToString().Replace(" ", "");

                foreach (var item in XNFZ_keyValues)
                {

                    if (string.Equals(sqlList[i], item.Key))
                    {
                        if (string.IsNullOrEmpty(sqlTagName))
                        {
                            Debug.Log(sqlList[i]);
                        }
                        else
                        {
                            item.Value.Value = sqlTagName;
                        }
                      
                    }
                }
            }
        }
    }



    public DataSet Query(string sql)
    {
        DataSet ds = new DataSet();
        MySqlCommand command = new MySqlCommand(sql, connection);
        command.CommandTimeout = 100;
        MySqlDataAdapter adapter = new MySqlDataAdapter(command);
        adapter.Fill(ds);

        return ds;
    }
    void LoadExcel(string path, string sheel)
    {
        var rows = MiniExcel.Query<XNFZ_Data>(path, sheel, ExcelType.XLSX, "A1");
        //using (var stream = File.OpenRead(path)) 
        //{
        //    var rows = stream.Query<XNFZ_Data>(); 

        if (rows != null)
        {
            foreach (XNFZ_Data item in rows)
            {

                if (!string.IsNullOrEmpty(item.TagName))
                {

                    XNFZ_keyValues.Add(item.TagName, item);
                }
                else
                {
                    Debug.LogError(sheel + $"中重复或空的DataName:{item.TagName}");
                }
            }
        }
        else
        {
            Debug.LogError("excel加载失败");
        }

    }
    public static XNFZ_Data GetDataName(string dataname)
    {
        if (XNFZ_keyValues.ContainsKey(dataname))
        {
            return XNFZ_keyValues[dataname];
        }
        else { Debug.Log("字典中不包含" + dataname); return null; }
    }
    protected override void OnDisable()
    {
        base.OnDisable();
        connection.Close();
    }
}
相关推荐
xcLeigh10 小时前
Unity基础:Instantiate实例化——在运行时动态创建游戏物体
游戏·unity·游戏引擎·教程·instantiate
流浪打工人1 天前
Unity3d TimeLine中audio track的使用
unity
淡海水1 天前
02-07-原理篇-GC暂停时间的本质
开发语言·unity·c#·gc·暂停时间
WarPigs1 天前
UI路径配置SO>字典json工作流
ui·unity
淡海水2 天前
02-06-原理篇-增量式GC与并发GC
算法·unity·c#·并发·gc·增量
阿松爱学习2 天前
【Unity开发】Aspose.PDF的使用
unity·pdf·c#
淡海水2 天前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
辻弋2016 天前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
Martina_03217 天前
AI生成3D场景导入 Unity/Unreal 后,NPC 总串层?用6步检查导航高度与跨层连接
人工智能·游戏·数学建模·3d·unity·自然语言处理·aigc
小贺儿开发7 天前
Unity 局域网遥控幻灯片展示工具 3.0
科技·http·unity·工具·ppt·通信·网页