在Unity中,我們有時候需要連接數據庫來達到數據的讀取與儲存。而在.NET平台下,ADO.NET為我們提供了公開數據訪問服務的類。客戶端應用程序可以使用ADO.NET來連接到數據源,並查詢,添加,刪除和更新所包含的數據。
對於ADO.NET,需要了解到Connection,Command,DataReader,DataAdapter,DataSet這幾個對象,他們是操作數據庫的重要對象。下面簡要得介紹下這幾個對象的作用以及功能(以SQL為例)。
1、Connection:它是建立應用程序與數據庫之間的連接通道,起到連接數據庫的功能。其訪問形式根據數據庫的類型而定。以SQL為例,則連接類型為SqlConnection。這種連接需要引入相應數據庫的命名空間,這里我們需要引入System.Data.SqlClient。想要引入這個命名空間還需要System.Data.dll文件,就在Unity安裝源目錄下即可找到,復制導入Unity的Asset即可。
寫法如下:
//聲明一個字符串用於存儲連接數據庫字符串 string s = "server=localhost;database=hasion;uid=sa;pwd=hasion"; SqlConnection con = new SqlConnection(s); con.Open();
這樣數據庫的連接就打開了。
2、Command:當應用程序建立與數據源的連接后,就需要Command對象來執行命令並從數據源中返回結果。它是一個數據命令對象,主要功能就是向數據庫發送查詢、更新、刪除、修改操作的SQL語句。這邊需要講下它執行SQL的幾種方法:ExecuteNonQuery方法,該方法是返回受影響的行數可用於統計,(如需進行存儲過程則需更改CommandType的屬性)。
寫法如下:
//聲明一個字符串用於存儲連接數據庫字符串 string s = "server=localhost;database=hasion;uid=sa;pwd=hasion"; SqlConnection con = new SqlConnection(s); con.Open(); //創建SqlCommand對象,並指定其使用con連接數據庫 SqlCommand cmd = new SqlCommand(); cmd.Connection = con; //設置CommandText,設置其執行SQL語句 cmd.CommandText="update Table_1 set 資產=1000 where 性別='女'"; int i = Convert.ToInt32 (cmd.ExecuteNonQuery ()); print ("查詢到"+i+"個女性");
ExecuteScalar方法,返回結果集合的第一行的第一列,常用語統計數據數量,用法如下:
//聲明一個字符串用於存儲連接數據庫字符串 string s = "server=localhost;database=hasion;uid=sa;pwd=hasion"; SqlConnection con = new SqlConnection(s); con.Open(); //創建SqlCommand對象,並指定其使用con連接數據庫 SqlCommand cmd = new SqlCommand(); cmd.Connection = con; //設置CommandText,設置其執行SQL語句 cmd.CommandText="select * from Table_1 where 性別='女'"; int i = Convert.ToInt32 (cmd.ExecuteScalar ()); print ("查詢到"+i+"個女性");
ExecuteReader方法,返回一個SqlDataReader對象,可進行數據的讀取,其用法如下:
//聲明一個字符串用於存儲連接數據庫字符串 string s = "server=localhost;database=hasion;uid=sa;pwd=hasion"; SqlConnection con = new SqlConnection(s); con.Open(); //創建SqlCommand對象,並指定其使用con連接數據庫 SqlCommand cmd = new SqlCommand(); cmd.Connection = con; //設置CommandText,設置其執行SQL語句 cmd.CommandText="select * from Table_1"; SqlDataReader st = cmd.ExecuteReader (); while (st.Read()) { print(st[0].ToString()); } cmd.Dispose ();
上面的功能就是輸出表格第一列的所有內容。
3、DataReader:這個就不做解釋了,就是使用ExecuteReader 中返回的對象,具體形式上面已經寫出。
4、DataAdapter:數據適配器,是DataSet與數據源之間的橋梁。它有兩種工作形式:一種是通過Command對象執行SQL語句,從數據源中檢索數據,並將檢索到的數據填充到DataSet對象,還有一種是把對DataSet對象所做的更改寫入數據源(為了方便,下面以vs的windows應用程序為例來展現其具體用法,因為其DataGridView能夠很好的展現表格數據)。其第一種用法如下(也就是填充DataSet數據集):
//聲明一個字符串用於存儲連接數據庫字符串 string s = "server=localhost;database=hasion;uid=sa;pwd=hasion"; SqlConnection con = new SqlConnection(s); //創建SqlCommand對象,並指定其使用con連接數據庫 SqlCommand cmd = new SqlCommand("select * from Table_1",con); //創建SqlDataAdapter對象 SqlDataAdapter sda = new SqlDataAdapter (); //指定Command sda.SelectCommand = cmd; //創建DataSet對象 DataSet ds = new DataSet (); sda.Fill (ds); DataGridView.DataSource = ds.Tables [0];
這里是使用DataAdapter對象的Fill方法填充DataSet數據集,Fill方法使用Select語句從數據源中檢索數據。需要注意的是,與Select命令關聯的Connection對象必須有效,但不需要將其打開。
還有一種用法就是更新數據源,就是使用DataAdapter的Update方法,可以將DataSet中修改過的數據及時地更新到數據庫中。用法如下:
SqlConnection con = null; SqlDataAdapter sda; DataSet ds; private void button1_Click(object sender, EventArgs e) { con = new SqlConnection("server=localhost;database=hasion;uid=sa;pwd=hasion"); //SqlCommand com = new SqlCommand("select * from Table_1", con); sda = new SqlDataAdapter("select * from Table_1", con); // sda.SelectCommand = com; ds = new DataSet(); sda.Fill(ds, "cs"); dataGridView.DataSource = ds.Tables[0]; } private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { //顯示每行數據 textBox1.Text = dataGridView.SelectedCells[0].Value.ToString(); textBox2.Text = dataGridView.SelectedCells[1].Value.ToString(); textBox3.Text = dataGridView.SelectedCells[2].Value.ToString(); textBox4.Text = dataGridView.SelectedCells[3].Value.ToString(); } private void button2_Click(object sender, EventArgs e) { //創建一個DataTable DataTable dt = ds.Tables["cs"]; //把表機構加載到Table_1中 sda.FillSchema(dt, SchemaType.Mapped); //創建DataRow,並設置DataRow中的值 DataRow dr = dt.Rows.Find(textBox1.Text.Trim()); dr["sex"] = textBox2.Text.Trim(); dr["age"] = textBox3.Text.Trim(); dr["money"] = textBox4.Text.Trim(); //實例化一個SqlCommadnbuilder SqlCommandBuilder cmb = new SqlCommandBuilder(sda); //更新數據庫 sda.Update(dt); }
這樣就可以對數據庫中的數據進行修改了。
5、DataSet:其實上面已經用到了這個對象,他是整個體系的核心,其數據來源於數據庫或者XML,為了從數據庫中獲取數據,需要使用數據適配器從數據中查詢數據。
C#連接數據庫基本原理和方法就是上面這些了。以上的這些一般在連接數據庫中都會用得到。這些也是我自己通過看書琢磨出來的一些東西,都是基礎的部分,更為復雜的數據庫連接則需要具體情況具體對待。
下面舉個例子:下圖是在SQL中建立的一個簡單的表格

在Unity中,我們如何將讀取到的數據呈現出來,利用上面的那些完全可以做到。下面貼出主要方法,僅供參考:
using UnityEngine; using System.Collections; using System; using System.Data; using System.Data.SqlClient; using System.Data.Common; public class SQLConnection : MonoBehaviour { SqlConnection con=null; SqlDataAdapter sda=null; //接受數據變量 private string str; void Start() { //創建連接 con = new SqlConnection ("server=localhost;database=hasion;uid=sa;pwd=hasion"); //執行sql sda=new SqlDataAdapter ("select * from Table_1", con); //實例化數據集,並寫入查詢到的數據 System.Data.DataSet ds = new System.Data.DataSet (); sda.Fill (ds, "table"); //按行和列打印出數據 for (int i=0; i<ds.Tables[0].Rows.Count; i++) { for(int j=0;j<ds.Tables[0].Columns.Count;j++) { str+=ds.Tables[0].Rows[i][j].ToString().Trim()+" "; if(j==ds.Tables[0].Columns.Count-1) { print(str); str=""; } } } } }
腳本執行之后,會打印出下面的結果:

數據既然能夠呈現出來,我們就可以進行其他進一步的操作了,比如制作表格,程序中的邏輯控制啊 等等很多功能,這些等以后遇到了 在具體問題 具體對待了。
當然sql的語句有很多,增刪改查都可以這樣操作,然后再配合Unity的GUI或者NGUI等等UI制作途徑。能夠很好得做出自己想要的效果。
我總結的基本就這么多了,有不足的地方歡迎大家批評指正!!!謝謝~~~~~~~~
