在unity3d中串連資料庫

來源:互聯網
上載者:User
  1. using System;  
  2. using System.Collections;  
  3. using System.Data;  
  4. using MySql.Data.MySqlClient;  
  5. public class CMySql : MonoBehaviour {  
  6.     // Global variables
      
  7.     public static MySqlConnection dbConnection;//Just like MyConn.conn in StoryTools before
      
  8.      static string host = "192.168.1.100";  
  9.      static string id = "mysql";//這裡是你自己的資料庫的使用者名稱字,我一開始想用root,發現不行,後來添加了新的使用者才可以
      
  10.      static string pwd = "123456";  
  11.      static string database = "test";  
  12.      static string result = "";  
  13.       
  14. private string strCommand = "Select * from unity3d_test ORDER BY id;";  
  15. public static DataSet MyObj;  
  16.      void OnGUI()  
  17.      {  
  18.          host = GUILayout.TextField( host, 200, GUILayout.Width(200));  
  19.          id = GUILayout.TextField( id, 200, GUILayout.Width(200));  
  20.          pwd = GUILayout.TextField( pwd, 200, GUILayout.Width(200));  
  21.          if(GUILayout.Button("Test"))  
  22.          {  
  23.     string connectionString = string.Format("Server = {0}; Database = {1}; User ID = {2}; Password = {3};",host,database,id,pwd);  
  24.     openSqlConnection(connectionString);  
  25.       
  26.     MyObj = GetDataSet(strCommand);  
  27.          }   
  28.          GUILayout.Label(result);  
  29.      }    
  30.     // On quit   
  31.     public static void OnApplicationQuit() {  
  32.         closeSqlConnection();  
  33.     }  
  34.      
  35.     // Connect to database   
  36.     private static void openSqlConnection(string connectionString) {  
  37.         dbConnection = new MySqlConnection(connectionString);  
  38.         dbConnection.Open();  
  39.         result = dbConnection.ServerVersion;  
  40.         //Debug.Log("Connected to database."+result);
      
  41.     }  
  42.      
  43.     // Disconnect from database   
  44.     private static void closeSqlConnection() {  
  45.         dbConnection.Close();  
  46.         dbConnection = null;  
  47.         //Debug.Log("Disconnected from database."+result);
      
  48.     }  
  49.       
  50.     // MySQL Query   
  51.     public static void doQuery(string sqlQuery) {  
  52.         IDbCommand dbCommand = dbConnection.CreateCommand();      
  53.         dbCommand.CommandText = sqlQuery;  
  54.         IDataReader reader = dbCommand.ExecuteReader();  
  55.         reader.Close();  
  56.         reader = null;  
  57.         dbCommand.Dispose();  
  58.         dbCommand = null;  
  59.     }  
  60.     #region Get DataSet   
  61.     public  DataSet GetDataSet(string sqlString)  
  62.     {  
  63.         //string sql = UnicodeAndANSI.UnicodeAndANSI.UnicodeToUtf8(sqlString);
      
  64.     
  65.     
  66.   DataSet ds = new DataSet();  
  67.         try  
  68.         {  
  69.             MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection);  
  70.             da.Fill(ds);  
  71.      
  72.         }  
  73.         catch (Exception ee)  
  74.         {  
  75.      
  76.             throw new Exception("SQL:" + sqlString + "/n" + ee.Message.ToString());  
  77.         }  
  78.         return ds;  
  79.     
  80.     }  
  81.     #endregion    
  82. }  

using UnityEngine;<br />using System;<br />using System.Collections;<br />using System.Data;<br />using MySql.Data.MySqlClient;<br />public class CMySql : MonoBehaviour {<br /> // Global variables<br /> public static MySqlConnection dbConnection;//Just like MyConn.conn in StoryTools before<br /> static string host = "192.168.1.100";<br /> static string id = "mysql";//這裡是你自己的資料庫的使用者名稱字,我一開始想用root,發現不行,後來添加了新的使用者才可以<br /> static string pwd = "123456";<br /> static string database = "test";<br /> static string result = "";</p><p>private string strCommand = "Select * from unity3d_test ORDER BY id;";<br />public static DataSet MyObj;<br /> void OnGUI()<br /> {<br /> host = GUILayout.TextField( host, 200, GUILayout.Width(200));<br /> id = GUILayout.TextField( id, 200, GUILayout.Width(200));<br /> pwd = GUILayout.TextField( pwd, 200, GUILayout.Width(200));<br /> if(GUILayout.Button("Test"))<br /> {<br /> string connectionString = string.Format("Server = {0}; Database = {1}; User ID = {2}; Password = {3};",host,database,id,pwd);<br /> openSqlConnection(connectionString);</p><p> MyObj = GetDataSet(strCommand);<br /> }<br /> GUILayout.Label(result);<br /> }<br /> // On quit<br /> public static void OnApplicationQuit() {<br /> closeSqlConnection();<br /> }</p><p> // Connect to database<br /> private static void openSqlConnection(string connectionString) {<br /> dbConnection = new MySqlConnection(connectionString);<br /> dbConnection.Open();<br /> result = dbConnection.ServerVersion;<br /> //Debug.Log("Connected to database."+result);<br /> }</p><p> // Disconnect from database<br /> private static void closeSqlConnection() {<br /> dbConnection.Close();<br /> dbConnection = null;<br /> //Debug.Log("Disconnected from database."+result);<br /> }</p><p> // MySQL Query<br /> public static void doQuery(string sqlQuery) {<br /> IDbCommand dbCommand = dbConnection.CreateCommand();<br /> dbCommand.CommandText = sqlQuery;<br /> IDataReader reader = dbCommand.ExecuteReader();<br /> reader.Close();<br /> reader = null;<br /> dbCommand.Dispose();<br /> dbCommand = null;<br /> }<br /> #region Get DataSet<br /> public DataSet GetDataSet(string sqlString)<br /> {<br /> //string sql = UnicodeAndANSI.UnicodeAndANSI.UnicodeToUtf8(sqlString);</p><p> DataSet ds = new DataSet();<br /> try<br /> {<br /> MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection);<br /> da.Fill(ds);</p><p> }<br /> catch (Exception ee)<br /> {</p><p> throw new Exception("SQL:" + sqlString + "/n" + ee.Message.ToString());<br /> }<br /> return ds;</p><p> }<br /> #endregion<br />} 

C#代碼:

[c-sharp]
view plaincopyprint?
  1. using UnityEngine;  
  2. using System;  
  3. using System.Collections;  
  4. using System.Data;  
  5. public class DataBaseTest : MonoBehaviour {  
  6. public GUISkin myGUISkin = new GUISkin();  
  7. string strID = "";  
  8. string strName = "";  
  9. string strSex = "";  
  10. int Index = 1;  
  11. // Use this for initialization
      
  12. void Start () {  
  13. }  
  14. void OnGUI()  
  15. {  
  16.   GUI.skin = myGUISkin;  
  17.   if (GUI.Button(new Rect(100,320,100,100),"Click Me"))  
  18.   {  
  19.    foreach(DataRow dr in CMySql.MyObj.Tables[0].Rows)  
  20.    {  
  21.     if (Index.ToString() == dr["ID"].ToString())  
  22.     {  
  23.      strID = dr["ID"].ToString();  
  24.      strName =  dr["Name"].ToString();  
  25.      strSex = dr["Sex"].ToString();  
  26.        
  27.      break;  
  28.     }  
  29.    }     
  30.    Index++;  
  31.     if(Index > 5)  
  32.    {  
  33.     Index = 1;   
  34.    }    
  35.      
  36.   }  
  37.   GUI.Label(new Rect(320,100,150,70),"DataBaseTest");  
  38.   GUI.Label(new Rect(300,210,150,70),strID);  
  39.   GUI.Label(new Rect(300,320,150,70),strName);  
  40.   GUI.Label(new Rect(300,430,150,70),strSex);  
  41.     
  42. }  
  43. }  

using UnityEngine;<br />using System;<br />using System.Collections;<br />using System.Data;<br />public class DataBaseTest : MonoBehaviour {<br />public GUISkin myGUISkin = new GUISkin();<br />string strID = "";<br />string strName = "";<br />string strSex = "";<br />int Index = 1;<br />// Use this for initialization<br />void Start () {<br />}<br />void OnGUI()<br />{<br /> GUI.skin = myGUISkin;<br /> if (GUI.Button(new Rect(100,320,100,100),"Click Me"))<br /> {<br /> foreach(DataRow dr in CMySql.MyObj.Tables[0].Rows)<br /> {<br /> if (Index.ToString() == dr["ID"].ToString())<br /> {<br /> strID = dr["ID"].ToString();<br /> strName = dr["Name"].ToString();<br /> strSex = dr["Sex"].ToString();</p><p> break;<br /> }<br /> }<br /> Index++;<br /> if(Index > 5)<br /> {<br /> Index = 1;<br /> } </p><p> }<br /> GUI.Label(new Rect(320,100,150,70),"DataBaseTest");<br /> GUI.Label(new Rect(300,210,150,70),strID);<br /> GUI.Label(new Rect(300,320,150,70),strName);<br /> GUI.Label(new Rect(300,430,150,70),strSex);</p><p>}<br />} 

2.導入dll
  同先前的文章 , 將MySql.data.dll Import至Assets底下 , 然後再到Unity/Editor/Data/Frameworks/Mono.framework 中
將System.Data.dll 也一起Import至Assets內 , 當然 , 如果想顯示中文的話 , 請參考中文視頻教學 , 建立一個GUISkin與字型

3.建立數據庫內容
  主要是因為代碼中的這段內容
     static string host = "192.168.1.100";
     static string id = "mysql";
     static string pwd = "123456";
     static string database = "test";
     private string strCommand = "Select * from unity3d_test ORDER BY id;";
其中host ,id , pwd 請自行設定 , 簡單的說就是連進你的MySQL啦~
然後建立一個名為test的Database , 在這個test下建立一張table , 取名為 unity3d_test ,
接下來就為這張unity3d_test建立3個欄位 : ID , Name , Sex (記得將ID設定為primary key 且默認值為1)
再來自行填入5筆資料(5筆資料的原因是腳本那邊是設定成5筆資料一個循環 , 使用者可以自行更改腳本試試)

4.建立GameObject
  建立完GameObject後將上面兩個腳本掛上去 , 如果有建立GUISkin , 記得指定GUISkin

5.執行
  執行後先按Test按鈕來連接數據庫 , 然後再按"Click Me"來顯示數據庫內的內容

6.總結 
  以上部份是有關連線至數據庫後 , 再將資料用DataSet的方式獲得出來再加以顯示至介面上 , 歡迎各位高手能夠多多批評指教

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.