Unity 将Excel表格中的数据导入到Mysql数据表中

1.Mysql数据表users如下:

2.即将导入的Excel表格如下:

3.代码如下:

cs 复制代码
using System;
using System.Data;
using System.IO;
using Excel;
using MySql.Data.MySqlClient;
using UnityEngine;
using UnityEditor;

public class ImportExcel
{
    // 数据库连接字符串,需根据实际情况修改
    private const string ConnectionString = "server=localhost;database=mygamedb;uid=root;pwd=123456;";

    [MenuItem("Excel操作/导入Excel数据到MySQL")]
    static void ImportExcelToMySQL()
    {
        string excelPath = Application.streamingAssetsPath + "/学生信息.xlsx";
        try
        {
            // 读取Excel数据
            DataRowCollection dataRows = ReadExcel(excelPath);
            if (dataRows != null && dataRows.Count > 0)
            {
                // 连接MySQL数据库并插入数据
                InsertDataToMySQL(dataRows);
            }
        }
        catch (Exception e)
        {
            Debug.LogError("导入数据时出错:" + e.Message);
        }
    }

    private static DataRowCollection ReadExcel(string path)
    {
        try
        {
            using (FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read))
            {
                IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
                DataSet result = excelReader.AsDataSet();
                return result.Tables[0].Rows;
            }
        }
        catch (Exception e)
        {
            Debug.LogError("读取Excel文件时出错:" + e.Message);
            return null;
        }
    }

    private static void InsertDataToMySQL(DataRowCollection dataRows)
    {
        using (MySqlConnection connection = new MySqlConnection(ConnectionString))
        {
            try
            {
                connection.Open();
                // 查询当前最大的id值
                string str_总数据条数 = "SELECT COUNT(*) AS total_records FROM users";
                MySqlCommand maxIdCommand = new MySqlCommand(str_总数据条数, connection);
                object obj_总数据条数 = maxIdCommand.ExecuteScalar();
                Debug.Log(Convert.ToInt32(obj_总数据条数));


                // 插入语句包含id字段,数据库自增长会自动赋值
                string insertQuery = "INSERT INTO users (id, username, password, registerdate) VALUES (@id, @username, @password, @registerdate)";
                using (MySqlCommand command = new MySqlCommand(insertQuery, connection))
                {
                    // 从第二行开始插入数据,跳过标题行
                    for (int i = 1; i < dataRows.Count; i++)
                    {
                        DataRow row = dataRows[i];
                        command.Parameters.Clear();
                        command.Parameters.AddWithValue("@id", Convert.ToInt32(obj_总数据条数)+i);
                        command.Parameters.AddWithValue("@username", row[0]);
                        command.Parameters.AddWithValue("@password", row[1]);
                        // 处理日期格式,假设Excel中的日期格式可直接转换
                        DateTime registerDate;
                        if (DateTime.TryParse(row[2].ToString(), out registerDate))
                        {
                            command.Parameters.AddWithValue("@registerdate", registerDate);
                        }
                        else
                        {
                            Debug.LogWarning("无法解析日期:" + row[2] + ",使用默认值");
                            command.Parameters.AddWithValue("@registerdate", DateTime.Now);
                        }
                        command.ExecuteNonQuery();
                    }
                }
                Debug.Log("数据成功导入到MySQL数据库");
            }
            catch (Exception e)
            {
                Debug.LogError("插入数据到MySQL时出错:" + e.Message);
            }
        }
    }
}
相关推荐
TDengine (老段)3 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
上学的小垃圾4 小时前
01-数据库系统概述
数据库
二进制漫游记4 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
2501_928996224 小时前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
泡干脆面就番茄6 小时前
MySQL_子查询_分页查询与联合查询详解
数据库·mysql
devpotato8 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
天若有情6738 小时前
Node+MySQL小型全栈笔记项目实战课程分享
数据库·笔记·mysql
wxwx_bscxy3228 小时前
基于springboot宠物领养系统的设计与实现
数据库·spring boot·后端·spring·宠物
九月要晚安9 小时前
达梦DW与AFC对比
数据库
实战派K8S&DB9 小时前
如何在内网配置 TiDB 数据库 Agent
数据库·人工智能·分布式·tidb