- using System;
- using System.Collections;
- using System.Data;
- using MySql.Data.MySqlClient;
- public class CMySql : MonoBehaviour {
- // Global variables
- public static MySqlConnection dbConnection;//Just like MyConn.conn in StoryTools before
- static string host = "192.168.1.100";
- static string id = "mysql";//這裡是你自己的資料庫的使用者名稱字,我一開始想用root,發現不行,後來添加了新的使用者才可以
- static string pwd = "123456";
- static string database = "test";
- static string result = "";
-
- private string strCommand = "Select * from unity3d_test ORDER BY id;";
- public static DataSet MyObj;
- void OnGUI()
- {
- host = GUILayout.TextField( host, 200, GUILayout.Width(200));
- id = GUILayout.TextField( id, 200, GUILayout.Width(200));
- pwd = GUILayout.TextField( pwd, 200, GUILayout.Width(200));
- if(GUILayout.Button("Test"))
- {
- string connectionString = string.Format("Server = {0}; Database = {1}; User ID = {2}; Password = {3};",host,database,id,pwd);
- openSqlConnection(connectionString);
-
- MyObj = GetDataSet(strCommand);
- }
- GUILayout.Label(result);
- }
- // On quit
- public static void OnApplicationQuit() {
- closeSqlConnection();
- }
-
- // Connect to database
- private static void openSqlConnection(string connectionString) {
- dbConnection = new MySqlConnection(connectionString);
- dbConnection.Open();
- result = dbConnection.ServerVersion;
- //Debug.Log("Connected to database."+result);
- }
-
- // Disconnect from database
- private static void closeSqlConnection() {
- dbConnection.Close();
- dbConnection = null;
- //Debug.Log("Disconnected from database."+result);
- }
-
- // MySQL Query
- 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
- public DataSet GetDataSet(string sqlString)
- {
- //string sql = UnicodeAndANSI.UnicodeAndANSI.UnicodeToUtf8(sqlString);
-
-
- 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());
- }
- return ds;
-
- }
- #endregion
- }
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?
- using UnityEngine;
- using System;
- using System.Collections;
- using System.Data;
- public class DataBaseTest : MonoBehaviour {
- public GUISkin myGUISkin = new GUISkin();
- string strID = "";
- string strName = "";
- string strSex = "";
- int Index = 1;
- // Use this for initialization
- void Start () {
- }
- void OnGUI()
- {
- GUI.skin = myGUISkin;
- if (GUI.Button(new Rect(100,320,100,100),"Click Me"))
- {
- foreach(DataRow dr in CMySql.MyObj.Tables[0].Rows)
- {
- if (Index.ToString() == dr["ID"].ToString())
- {
- strID = dr["ID"].ToString();
- strName = dr["Name"].ToString();
- strSex = dr["Sex"].ToString();
-
- break;
- }
- }
- Index++;
- if(Index > 5)
- {
- Index = 1;
- }
-
- }
- GUI.Label(new Rect(320,100,150,70),"DataBaseTest");
- GUI.Label(new Rect(300,210,150,70),strID);
- GUI.Label(new Rect(300,320,150,70),strName);
- GUI.Label(new Rect(300,430,150,70),strSex);
-
- }
- }
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的方式獲得出來再加以顯示至介面上 , 歡迎各位高手能夠多多批評指教