Unity3D 连接MySQL数据库笔记4-Unity3d代码

来源:互联网 发布:听歌学英文软件 编辑:程序博客网 时间:2024/06/05 04:36
新建Unity3D项目

新建一个 Plugins文件夹

把所需要的DLL放到 Plugins中

新建C#脚本 命名为ToMysql.cs

 

不多说了 ,直接上代码,很简单  有注释 ,大家一看就明白了

 

using UnityEngine;using System;using System.Collections;using System.Data;using MySql.Data.MySqlClient;public class ToMysql : MonoBehaviour {      public static MySqlConnection dbConnection; /*mysql数据库连接对象*/     static string host = "";       static string id = "";       static string pwd = "";       static string database = "";     static string result = "";             private string strCommand ;       public static DataSet MyObj;  public string connectionString;public Vector2 pPos;public Vector2 pSize;public DataTable pdatatable;public DataSet   pDataset;public Vector2 conPos;public Vector2 conSize; void Awake(){ host = "127.0.0.1";  /*mysql数据库服务器地址*/      id = "root";  /*mysql用户名*/      pwd = "123456";  /*密码*/      database = "test";/*数据库名*/        result = "";  /*mysql版本号信息暂存*/           strCommand = "Select uname from tuser";  /*一些UI按钮的坐标配置信息11*/  pPos = new Vector2( 50,50 );  pSize = new Vector2(100,35); /*一些UI按钮的坐标配置信息22*/  conPos = new Vector2( 300,60 );  conSize = new Vector2( 150, 50 ); /*初始给一个新增员工信息的时候的默认文本框内默认值*/ pkey = "100291"; name = "姓名";       sex = "男";  age = "25";  adress = "家庭详细住址";  money = "2800";}     void OnGUI()       {     /*第一次连接到MySQL数据库*/   ConnectFirstServer();   /*显示连接到的MySQL数据库的版本号信息*/           GUILayout.Label(result);  /*主要大列表显示员工信息的修改删除function*/   ShowP_GUIData();   /*添加员工信息*/AddPerson();   /*点了修改编辑信息后*/  ShowEdit_PersonData();       }        /*关闭Unity程序*/    public static void OnApplicationQuit()     {          closeSqlConnection();      }    /*第一次连接到MySQL数据库*/public void ConnectFirstServer(){if( dbConnection == null ){  GUI.Button( new Rect(conPos.x ,conPos.y,conSize.x,conSize.y),"数据库Server地址");   host = GUI.TextField(new Rect(conPos.x ,conPos.y+50,conSize.x,conSize.y),host );             GUI.Button( new Rect(conPos.x ,conPos.y+100,conSize.x,conSize.y),"mysql用户名");   id = GUI.TextField(new Rect(conPos.x ,conPos.y+150,conSize.x,conSize.y),id );          GUI.Button( new Rect(conPos.x ,conPos.y+200,conSize.x,conSize.y),"密码");           pwd = GUI.TextField(new Rect(conPos.x ,conPos.y+250,conSize.x,conSize.y),pwd );   GUI.Button( new Rect(conPos.x ,conPos.y+300,conSize.x,conSize.y),"数据库名");            database = GUI.TextField(new Rect(conPos.x ,conPos.y+350,conSize.x,conSize.y),database );     connectionString = string.Format("Server = {0};Database = {1}; User = {2}; Password = {3};",host,database,id,pwd);           if(GUI.Button(new Rect(conPos.x+180 ,conPos.y+200,conSize.x,conSize.y),"登录数据库"))           {              openSqlConnection(connectionString);                MyObj = GetDataSet(strCommand);            /*读取数据函数Debug 管理员账号密码*/            ReaderData();/*测试方法Debug 管理员账号密码*/ShowDataSet();/*重新读取p_info表里所有员工信息*/SelectPdataSet();          }   }}    // Connect to database      private static void openSqlConnection(string connectionString)     {          dbConnection = new MySqlConnection(connectionString);  try{        dbConnection.Open();          result = dbConnection.ServerVersion;  /*获得MySql的版本*/}catch(MySqlException e){Debug.Log( e.Message );dbConnection = null;host  = "服务器连接错";id  = "用户名或密码错误";pwd = "用户名或密码错误";}Debug.Log(result);    }          /*关闭Mysql连接*/    private static void closeSqlConnection()     {          dbConnection.Close();          dbConnection = null;      }            /*执行某些mysql语句*/    public static void doQuery(string sqlQuery)     {          IDbCommand dbCommand = dbConnection.CreateCommand();              dbCommand.CommandText = sqlQuery;          IDataReader reader = dbCommand.ExecuteReader();          reader.Close();          reader = null;         dbCommand.Dispose();          dbCommand = null;      }      #region Get DataSet   /*得到一个 dataSet对象*/    public  DataSet GetDataSet(string sqlString)      {           DataSet ds = new DataSet();          try          {              MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection);              da.Fill(ds);               }          catch (Exception ee)          {                   Debug.Log("SQL:" + sqlString + "\n" + ee.Message.ToString());  dbConnection = null;        }          return ds;          }      #endregion       /*Debug显示管理员账号密码*/    void ReaderData()    {        MySqlCommand mySqlCommand = new MySqlCommand("Select * from tuser;", dbConnection);        MySqlDataReader reader = mySqlCommand.ExecuteReader();        try        {            while (reader.Read())            {                if (reader.HasRows)                {                    print("uname:" + reader.GetString(0) + "--upwd:" + reader.GetString(1) );                }            }        }        catch (Exception e)        {           Debug.Log("查询失败了!"+ e.Message );dbConnection = null;        }        finally        {            reader.Close();        }             }/*Debug显示管理员账号密码*/void ShowDataSet(){ string commandString = "Select * from tuser";                /* 创建DataSet命令对象和DataSet*/if(dbConnection.State != ConnectionState.Open){             dbConnection = new MySqlConnection(connectionString);     try{              dbConnection.Open();                result = dbConnection.ServerVersion;  /*获得MySql的版本*/    }    catch(MySqlException e)    {    Debug.Log( e.Message );      dbConnection = null;    }}        using(     MySqlDataAdapter DataAdapter = new MySqlDataAdapter(commandString, connectionString)){               DataSet  Dataset = new DataSet();                /* 填充DataSet对象*/             DataAdapter.Fill(Dataset, "tuser");                /*从DataSet获取一个表*/                DataTable datatable = Dataset.Tables[0];     for (int i = 0; i < datatable.Rows.Count; i++)                {                                                          Debug.Log( datatable.Rows[i]["uname"].ToString() );                    Debug.Log(  datatable.Rows[i]["upwd"].ToString() );       }}}        /*显示员工信息function*/void SelectPdataSet(){ string commandString = "Select * from p_info";                /* 创建DataSet命令对象和DataSet*/if(dbConnection.State != ConnectionState.Open){           dbConnection = new MySqlConnection(connectionString);  try{        dbConnection.Open();          result = dbConnection.ServerVersion;  /*获得MySql的版本*/}catch(MySqlException e){Debug.Log( e.Message );}}           using(     MySqlDataAdapter DataAdapter = new MySqlDataAdapter(commandString, connectionString)){    if(pDataset !=null )     {     pDataset = null;     }                pDataset = new DataSet();                /* 填充DataSet对象*/               DataAdapter.Fill(pDataset, "p_info");                /*从DataSet获取一个表*/    if(pdatatable != null)    {pdatatable = null;    }                pdatatable = pDataset.Tables[0];    }}/*主要列表显示员工信息的修改删除function*/void ShowP_GUIData(){if( pdatatable != null ){    if(pdatatable  == null) return;try{for (int i = 0; i < pdatatable.Rows.Count; i++)                {                        GUI.Button(new Rect(pPos.x ,15 ,pSize.x,pSize.y ), "姓名" );                    GUI.Button(new Rect(pPos.x+100 ,15 ,pSize.x,pSize.y ),  "性别" );    GUI.Button(new Rect(pPos.x+200 ,15 ,pSize.x,pSize.y ),  "年龄" );    GUI.Button(new Rect(pPos.x+300 ,15 ,pSize.x +200,pSize.y ),   "家庭详细住址" );    GUI.Button(new Rect(pPos.x+600,15 ,pSize.x,pSize.y ),   "月工资" );                                       GUI.Button(new Rect(pPos.x ,pPos.y +i*35 ,pSize.x,pSize.y ), pdatatable.Rows[i]["pname"].ToString() );                    GUI.Button(new Rect(pPos.x+100 ,pPos.y +i*35 ,pSize.x,pSize.y ),  pdatatable.Rows[i]["psex"].ToString() );    GUI.Button(new Rect(pPos.x+200 ,pPos.y +i*35 ,pSize.x,pSize.y ),  pdatatable.Rows[i]["page"].ToString() );    GUI.Button(new Rect(pPos.x+300 ,pPos.y +i*35 ,pSize.x +200,pSize.y ),  pdatatable.Rows[i]["padress"].ToString() );    GUI.Button(new Rect(pPos.x+600,pPos.y +i*35 ,pSize.x,pSize.y ),  pdatatable.Rows[i]["pmoney"].ToString() );   if( GUI.Button(new Rect(pPos.x+710,pPos.y +i*35 ,pSize.x,pSize.y ),  "修改" ))   {       canEdit_person = true;             Debug.Log( pdatatable.Rows[i]["pkey"].ToString() );      Edit_Person( pdatatable.Rows[i]["pkey"].ToString() );      pdatatable = null;   }    if( GUI.Button(new Rect(pPos.x+810,pPos.y +i*35 ,pSize.x,pSize.y ),  "删除" ) )    {    DeletePerson( pdatatable.Rows[i]["pkey"].ToString() );     }       }if( pdatatable.Rows.Count>=1){   if( GUI.Button(new Rect(pPos.x+750,15 ,pSize.x,pSize.y ),   "增加员工信息" ))       {canAddPerson = true;    pdatatable = null;        }}}catch {Debug.Log(  "Some Error");}}}public string  pkey;public string name;public string sex;public string age;public string adress;public string money;public bool canAddPerson;public int selGridInt = 0;public string[] selsex = new string[] {"男", "女"};public string sqlstr;/*添加员工信息的function*/void AddPerson(){if(canAddPerson ){GUI.Button( new Rect(150 ,conPos.y+100,conSize.x,conSize.y),"员工唯一编号" ); pkey = GUI.TextField(new Rect(conPos.x ,conPos.y+100,conSize.x,conSize.y),pkey );       GUI.Button( new Rect(150 ,conPos.y+160,conSize.x,conSize.y),"姓名" ); name = GUI.TextField(new Rect(conPos.x ,conPos.y+160,conSize.x,conSize.y),name );             GUI.Button( new Rect(150 ,conPos.y+220,conSize.x,conSize.y),"性别" );selGridInt = GUI.SelectionGrid(new Rect(conPos.x ,conPos.y+220,100,30), selGridInt, selsex, 2);GUI.Button( new Rect(150 ,conPos.y+270,conSize.x,conSize.y),"年龄" );         age = GUI.TextField(new Rect(conPos.x ,conPos.y+270,conSize.x,conSize.y),age );GUI.Button( new Rect(150 ,conPos.y+330,conSize.x,conSize.y),"家庭详细住址" );   adress = GUI.TextField(new Rect(conPos.x ,conPos.y+330,conSize.x,conSize.y),adress ); GUI.Button( new Rect(150 ,conPos.y+380,conSize.x,conSize.y),"员工月工资" );money = GUI.TextField(new Rect(conPos.x ,conPos.y+380,conSize.x,conSize.y),money );  if( GUI.Button(new Rect(conPos.x+280 ,conPos.y+220,conSize.x,conSize.y),"添加此员工信息") ){if( pkey.Trim()==""|| name.Trim()==""||sex.Trim()==""||age.Trim()==""||adress.Trim()==""||money.Trim()==""){ pkey = "有错误请重新输入";             name = "姓名";                     sex = "性别必须为男或女";                 age = "年龄必须为数字";                 adress = "家庭详细住址";                  money = "月工资必须为数字";return;}if( selGridInt == 0 ){sex = "男";}if( selGridInt == 1 ){sex = "女";}if( isNumberic(age)==false && isNumberic(money)==false ){ pkey = "有错误请重新输入";             name = "姓名";                     sex = "性别必须为男或女";                 age = "年龄必须为数字";                 adress = "家庭详细住址";                  money = "月工资必须为数字或超过了限制";  return;}#region /*插入数据*/  try{                   openSqlConnection(connectionString);   if( dbConnection.State != ConnectionState.Open){   dbConnection.Open();}    sqlstr = string.Format("INSERT INTO p_info(`pkey`, `pname`, `psex`, `page`, `padress`, `pmoney`) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}')",                                          pkey,name,sex,age,adress,money);                    MySqlCommand cmd = new MySqlCommand(sqlstr, dbConnection);                    cmd.ExecuteNonQuery();                    dbConnection.Close();Debug.Log("InsertData");canAddPerson = false;SelectPdataSet();}catch (MySqlException e){pkey = "发生错误插入失败";             name = "姓名";                     sex = "性别必须为男或女";                 age = "年龄必须为数字";                 adress = "家庭详细住址";                  money = "月工资必须为数字或超过了限制";Debug.Log("信息录入失败" + e.Message);}#endregion}if( GUI.Button(new Rect(conPos.x+280 ,conPos.y+320,conSize.x,conSize.y),"返回") ){    canAddPerson = false;SelectPdataSet();}}}/*检查输入的是否是数字*/public bool isNumberic(string message)    {       /*判断是否为整数字符串*/       /*是的话则将其转换为数字并将其设为out类型的输出值、返回true, 否则为false*/       int result = -1;   /*result 定义*/        try        {          /*当数字字符串的为是少于4时,以下三种都可以转换,任选一种*/          /*如果位数超过4的话,请选用Convert.ToInt32() 和int.Parse()*/             result = int.Parse(message);                return true;        }        catch        {            return false;Debug.Log("number false");        }   }/*删除选中员工信息的方法*/void DeletePerson(string Spkey){#region /*删除数据*/  try{                   openSqlConnection(connectionString);   if( dbConnection.State != ConnectionState.Open){   dbConnection.Open();}                sqlstr = string.Format("Delete from  p_info where pkey='{0}'", Spkey);                    MySqlCommand cmd = new MySqlCommand(sqlstr, dbConnection);                    cmd.ExecuteNonQuery();                    dbConnection.Close();Debug.Log("DeleteData");SelectPdataSet();}catch (MySqlException e){Debug.Log("删除失败" + e.Message);}#endregion}public bool canEdit_person;/*传入选中要修改员工的主键pkey,并读取出对应数据给多个字段*/void Edit_Person( string mpkey ){if(canEdit_person){#region   检索当前选中的数据 string commandString5 = string.Format("Select * from p_info where pkey='{0}'", mpkey); Debug.Log(  commandString5);                /* 创建DataSet命令对象和DataSet*/if(dbConnection.State != ConnectionState.Open){            dbConnection = new MySqlConnection(connectionString);      try{               dbConnection.Open();                  result = dbConnection.ServerVersion;  /*获得MySql的版本*/    }     catch(MySqlException e)     { Debug.Log( e.Message );     }}           using(     MySqlDataAdapter DataAdapter = new MySqlDataAdapter(commandString5, connectionString)){                  DataSet spDataset = new DataSet();                /* 填充DataSet对象*/               DataAdapter.Fill(spDataset, "p_info");                /*从DataSet获取一个表*/                   DataTable spdatatable = spDataset.Tables[0];        pkey=  spdatatable.Rows[0]["pkey"].ToString() ;name =spdatatable.Rows[0]["pname"].ToString() ;age =spdatatable.Rows[0]["page"].ToString() ;adress=spdatatable.Rows[0]["padress"].ToString() ;      money=spdatatable.Rows[0]["pmoney"].ToString() ;}#endregion}}/*点击修改资料按钮后,详细显示当前选中的员工的信息,并提供文本框进行修改*/void ShowEdit_PersonData(){if(canEdit_person){/*  GUI.Button( new Rect(150 ,conPos.y+100,conSize.x,conSize.y),"员工唯一编号" ); pkey = GUI.TextField(new Rect(conPos.x ,conPos.y+100,conSize.x,conSize.y),pkey );*/       GUI.Button( new Rect(150 ,conPos.y+160,conSize.x,conSize.y),"姓名" ); name = GUI.TextField(new Rect(conPos.x ,conPos.y+160,conSize.x,conSize.y),name );             GUI.Button( new Rect(150 ,conPos.y+220,conSize.x,conSize.y),"性别" );selGridInt = GUI.SelectionGrid(new Rect(conPos.x ,conPos.y+220,100,30), selGridInt, selsex, 2);GUI.Button( new Rect(150 ,conPos.y+270,conSize.x,conSize.y),"年龄" );         age = GUI.TextField(new Rect(conPos.x ,conPos.y+270,conSize.x,conSize.y),age );GUI.Button( new Rect(150 ,conPos.y+330,conSize.x,conSize.y),"家庭详细住址" );   adress = GUI.TextField(new Rect(conPos.x ,conPos.y+330,conSize.x,conSize.y),adress ); GUI.Button( new Rect(150 ,conPos.y+380,conSize.x,conSize.y),"员工月工资" );money = GUI.TextField(new Rect(conPos.x ,conPos.y+380,conSize.x,conSize.y),money );Debug.Log("EditPersonData");if( GUI.Button(new Rect(conPos.x+280 ,conPos.y+220,conSize.x,conSize.y),"返回主页") ){canEdit_person = false;SelectPdataSet();} if( GUI.Button(new Rect(conPos.x+280 ,conPos.y+320,conSize.x,conSize.y),"修改员工信息") ){if( pkey.Trim()==""|| name.Trim()==""||sex.Trim()==""||age.Trim()==""||adress.Trim()==""||money.Trim()==""){ pkey = "有错误请重新输入";             name = "姓名";                     sex = "性别必须为男或女";                 age = "年龄必须为数字";                 adress = "家庭详细住址";                  money = "月工资必须为数字";return;}if( selGridInt == 0 ){sex = "男";}if( selGridInt == 1 ){sex = "女";}if( isNumberic(age)==false && isNumberic(money)==false ){ pkey = "有错误请重新输入";             name = "姓名";                     sex = "性别必须为男或女";                 age = "年龄必须为数字";                 adress = "家庭详细住址";                  money = "月工资必须为数字或超过了限制";  return;}#region /*更新数据*/  try{                   openSqlConnection(connectionString);   if( dbConnection.State != ConnectionState.Open){   dbConnection.Open();}    sqlstr = string.Format("UPDATE p_info SET  pname='{0}', psex='{1}', page='{2}', padress='{3}', pmoney='{4}'WHERE pkey = '{5}'",                                          name,sex,age,adress,money ,pkey);                    MySqlCommand cmd = new MySqlCommand(sqlstr, dbConnection);                    cmd.ExecuteNonQuery();                    dbConnection.Close();Debug.Log("UpdateData");canEdit_person = false;SelectPdataSet();}catch (MySqlException e){pkey = "发生错误更新失败";             name = "姓名";                     sex = "性别必须为男或女";                 age = "年龄必须为数字";                 adress = "家庭详细住址";                  money = "月工资必须为数字或超过了限制";Debug.Log("信息录入失败" + e.Message);}#endregion}}}}

  

新建一个 GameObject,将这个脚本拖放到 GameObject对象上

点击运行,输入 

服务器地址:127.0.0.1

用户名:root

密码:123456

需要访问的数据库db名:test

点击  登录数据库

 

 

 

如果登录成功,会看到我们刚才插入的信息

 

点击增加员工信息

 

 

嘿嘿,点击添加此员工信息

 

 

成功!嘿嘿!

 

点击删除《深华东》 试试

 

删除成功!

点击修改  张三的信息

 

修改性别为女,年龄为18,工资为800,点击修改员工信息

 

修改成功!

有的朋友反应,发布无法连接,我这里测试是没有问题,

 

具体请看 ,发布后连接数据库如下图

 

欢迎与我交流Unity3D技术,QQ2360450496

 

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 积分兑换手机被骗了怎么办 老板对你的上级不满怎么办 如果老板不给工资怎么办 手机号码被标记为其他公司怎么办? 被标记为骚扰电话怎么办 手机被标记骚扰电话怎么办 360摄像头不支持5g怎么办 摄像头不支持5g网络怎么办 家里的wifi卡了怎么办 办信用卡没有座机号码怎么办 拨打电话时显示号码有误怎么办 个体营业执照怎么办企业支付宝 没满16岁怎么办电话卡 我的电话卡丢了怎么办 公司注销地税没有补齐怎么办 公司没有固定电话怎么办信用卡 申请信用卡公司没有固定电话怎么办 办理信用卡公司没有固定电话怎么办 江门市固话欠费停机后怎么办 物业交钥匙地面有裂缝怎么办 深圳交通卡丢了怎么办 没装etc走etc怎么办 找不到过敏源身体痒怎么办 微信客服电话打不通怎么办 华为手机网络信号不好怎么办 酷我好友动态加载不了怎么办? 米兔电话手表停机了怎么办 糖猫电话手表停机了怎么办 360电话手表停机了怎么办 小天才电话手表停机怎么办 移动手机卡不知道号码怎么办 天猫退款手机号换了怎么办 科目二考试脚抖怎么办 面试新工作没打电话怎么办 怀孕5个月胎位低怎么办 做业务很害怕打电话怎么办 固定电话总是接到骚扰电话怎么办 电话卡通话被限制了怎么办? 手机名单拉黑了怎么办 被苹果6s被拉黑怎么办 重庆福利企业解聘残疾职工怎么办