二进制数据存入数据库

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Data;
using System.IO;
using System.Data;
using System.Runtime.Serialization.Formatters.Binary;






public class WriteSQLcfg : MonoBehaviour {


   static MySqlConnection dbConnection;
    string query;
    DataSet ds_sql;
    DataTable dt_sql;
    public static List<string> nameArray = new List<string>();
    public string dataBaseName;


void Start () {


}

void Update () {


        if (Input.GetKeyDown(KeyCode.W))
        {
            OpenSql();
            CreatUser("admin", "admin");
            CreateDataBase(dataBaseName);


            GetObjectNameToArray<string>("cfg", ".xml");


            //读取配置文件并导入数据库
            for (int i = 0; i < nameArray.Count; i++)
            {
                string fileName = Application.streamingAssetsPath + "/cfg/" + nameArray[i] + ".xml";
                ds_sql = ReadBatFile(fileName);
                dt_sql = ds_sql.Tables[0];


                List<string> list_columns = new List<string>();
                List<string> list_rows = new List<string>();
                foreach (DataColumn colum in dt_sql.Columns)
                {
                    list_columns.Add(colum.ToString());
                }


                CreatTable(nameArray[i], dataBaseName, list_columns.ToArray());


                Dictionary<int, List<string>> tempValue = new Dictionary<int, List<string>>();
                int key = 0;
                foreach (DataRow row in dt_sql.Rows)
                {
                    tempValue[key] = new List<string>();
                    foreach (DataColumn column in dt_sql.Columns)
                    {
                        tempValue[key].Add(row[column].ToString());
                    }
                    key++;
                }


                //写入数据
                for (int index = 0; index < tempValue.Count; index++)
                {
                    InsertInfo(nameArray[i], list_columns.ToArray(), tempValue[index].ToArray());
                }
            }


            dbConnection.Close();


        }

}










    public  void OpenSql()
    {
        try
        {
            dbConnection = new MySqlConnection("Data Source=localhost;Persist Security Info=yes;UserId=root; PWD=admin;");
            dbConnection.Open();
        }
        catch (Exception e)
        {
            throw new Exception("服务器连接失败,请重新检查是否打开MySql服务。" + e.Message.ToString());
        }
    }
    //判断表格是否存在
    public bool IsTableExits(string tableName,string database)
    {
        query = string.Format("SELECT DISTINCT t.table_name, t.TABLE_SCHEMA FROM information_schema.TABLES t WHERE t.table_name = '{0}' AND t.TABLE_SCHEMA = '{1}';", tableName, database);
        DataSet result = ExecuteQuery(query);
        return result.Tables[0].Rows.Count >= 1;
    }
    //判断库是否存在
    public bool IsDataBaseExits(string dataBaseName)
    {
        query = string.Format("SELECT information_schema.SCHEMATA.SCHEMA_NAME FROM information_schema.SCHEMATA where SCHEMA_NAME = '{0}';", dataBaseName);
        DataSet result = ExecuteQuery(query);
        return result.Tables[0].Rows.Count >= 1;
    }
    //判断用户是否存在
    public bool IsUserExist(string userName)
    {
        query = string.Format("SELECT user FROM mysql.user where user = 'admin';");
        DataSet result = ExecuteQuery(query);
        return result.Tables[0].Rows.Count >= 1;
    }
    //创建用户
    public void CreatUser(string userName,string psw)
    {
        if (IsUserExist(userName))
        {
            return;
        }
        query = string.Format("GRANT all privileges  ON mysql.user TO '{0}'@'%' IDENTIFIED BY '{1}';", userName, psw);
        ExecuteQuery(query);
    }


    //创建数据库
    public DataSet CreateDataBase(string dataBaseName)
    {
        query = "CREATE DATABASE IF NOT EXISTS " + dataBaseName + ";";
        return ExecuteQuery(query);
    }
    //创建表格
    public DataSet CreatTable(string tableName, string dataBase, string[] colName)
    {
        dbConnection.Close();
        string connectionString = string.Format("Data Source=localhost;Database = {0};UserId=root; PWD=admin;", dataBase);
        dbConnection = new MySqlConnection(connectionString);
        dbConnection.Open();
        bool isexist;
        isexist = IsTableExits(tableName,dataBase);
        Debug.Log(isexist);
        if (isexist)
        {
            string dropTable = string.Format("DROP TABLE {0}", tableName);
            ExecuteQuery(dropTable);
        }


        //if (colName.Length != colType.Length)
        //{
        //    throw new Exception("columns.Length != colType.Length");
        //}


        string query = "CREATE TABLE " + tableName + " (" + colName[0] + " INT NOT NULL AUTO_INCREMENT";


        for (int i = 1; i < colName.Length; ++i)
        {
            query += ", " + colName[i] + " varchar(255)" ;
        }


        query += ", PRIMARY KEY (" + colName[0] + ")" + ");";




        return ExecuteQuery(query);
    }


    //插入一条数据,不包括ID,自动累加
    public DataSet InsertInfo(string tableName, string[] colNames, string[] values)
    {
        string query = "INSERT INTO " + tableName + "(";
        query += colNames[1];
        for (int cnt = 2; cnt < colNames.Length; cnt++)
        {
            query += "," + colNames[cnt];
        }
        query += ")";
        query += " VALUES (" + "'" + values[1] + "'";
        for (int i = 2; i < values.Length; ++i)
        {
            query += ", " + "'" + values[i] + "'";
        }


        query += ")";


        Debug.Log(query);
        return ExecuteQuery(query);


    }


 


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


    public DataSet ReadBatFile(string fileName)
    {
        BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
        Stream fStream2 = new FileStream(fileName, FileMode.Open, FileAccess.Read);
        DataSet ds = (DataSet)binFormat.Deserialize(fStream2);//反序列化对象
        return ds;
    }


    


    /// <summary>  
    /// 根据指定的 Assets下的文件路径 返回这个路径下的所有文件名//  
    /// </summary>  
    /// <returns>文件名数组</returns>  
    /// <param name="path">Assets下“一"级路径</param>  
    /// <param name="pattern">筛选文件后缀名的条件.</param>  
    /// <typeparam name="T">函数模板的类型名t</typeparam>  
    void GetObjectNameToArray<T>(string path, string pattern)
    {
        string objPath = Application.streamingAssetsPath + "/" + path;
        string[] directoryEntries;
        try
        {
            //返回指定的目录中文件和子目录的名称的数组或空数组  
            directoryEntries = System.IO.Directory.GetFileSystemEntries(objPath);


            for (int i = 0; i < directoryEntries.Length; i++)
            {
                string p = directoryEntries[i];
                //得到要求目录下的文件或者文件夹(一级的)//  
                string[] tempPaths = StringExtention.SplitWithString(p, "/StreamingAssets/" + path + "\\");


                //tempPaths 分割后的不可能为空,只要directoryEntries不为空//  
                if (tempPaths[1].EndsWith(".meta"))
                    continue;
                string[] pathSplit = StringExtention.SplitWithString(tempPaths[1], ".");
                //文件  
                if (pathSplit.Length > 1)
                {
                    nameArray.Add(pathSplit[0]);
                }
                //遍历子目录下 递归吧!  
                else
                {
                    GetObjectNameToArray<T>(path + "/" + pathSplit[0], "pattern");
                    continue;
                }
            }
        }
        catch (System.IO.DirectoryNotFoundException)
        {
            Debug.Log("The path encapsulated in the " + objPath + "Directory object does not exist.");
        }
    }


    public class StringExtention
    {


        public static string[] SplitWithString(string sourceString, string splitString)
        {
            string tempSourceString = sourceString;
            List<string> arrayList = new List<string>();
            string s = string.Empty;
            while (sourceString.IndexOf(splitString) > -1)  //分割  
            {
                s = sourceString.Substring(0, sourceString.IndexOf(splitString));
                sourceString = sourceString.Substring(sourceString.IndexOf(splitString) + splitString.Length);
                arrayList.Add(s);
            }
            arrayList.Add(sourceString);
            return arrayList.ToArray();
        }
    }   
      
      
        
     
}

猜你喜欢

转载自blog.csdn.net/w87580575/article/details/78538086
今日推荐