[轉載]Unity3D 訪問Access數據庫

在開始這個小教程以前呢,其實在網上你已經能夠找到相關的資料了,可是我仍是要把我本身作練習的一點東西分享出來。寫這個教程的主要緣由呢,是一個朋友在u3d的官網論壇裏,找到了這個demo,可是在他使用的過程當中遇到了問題,我看了給他解決掉以後,爲了其餘朋友不至於發生同類的問題,特在此嘮叨一番。在開始主題以前呢,我真的想說,北京的公交太不給力了,我這幾天,每次等公交都要一個多小時,直接崩潰中。好,閒話不扯啦!下面開始個人教程之旅吧!
 
Access數據庫呢,是一個輕量級的數據庫,之前在學習.net應用開發的時候瞭解過。在pc的軟件開發中,不少時候,咱們存儲的數據量不會很大的狀況都會選擇他,主要他輕量級,容易部署。更多Access的問題,能夠去微軟的官網查看。
 
在U3D中要訪問Access數據庫,咱們須要用到兩個dll,System.Data.dll和System.EnterpriseServices.dll,缺一不可。咱們找到這兩個dll放到u3d的Plugins文件夾下面。sql

下面咱們建立一個Access數據庫版本是07樣式是*.accdb(03版本的Access數據庫的樣式爲*.mdb)在咱們進行code的時候,要根據不一樣的版本進行判斷啦,對於不一樣的Access數據庫版本,咱們要對應不懂的文件後綴名。要否則會提示你數據庫文件是未知文件。
下面是讀取Access的一個demo,其餘的修改,添加數據都是在修改他的sql語句啦,相關的知識,能夠查看Access在.net中如何對Access進行CURD操做的。簡單的代碼以下:
/* |-------------------------------------------
 * |做者:Mr.野豬
 * |
 * |時間:2012/09/26  晚:23:56
 * |
 * |目的:用於技術交流
 * |------------------------------------------
 */
using UnityEngine;
using System.Collections;
//引入命名空間
using System;
using System.Data;
using System.Data.Odbc;
public class RaderData : MonoBehaviour 
{
    /// <summary>
    /// 聲明一個接受讀取數據字段值的變量
    /// </summary>
    string text = string.Empty;
    public void Start()
    {
        //讀取數據文件。
        ReadStudent(Application.dataPath + "/Wild boar.accdb");
    }
    /// <summary>
    /// 讀取表數值的函數
    /// </summary>
    /// <param name="filetoread">數據文件的路徑</param>
    internal void ReadStudent(string filetoread)
    {
        //聲明鏈接數據庫的字段
        string connection = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" + filetoread;
     
        //從表中查詢全部數據
        string sqlQuery = "select * from Student";
        //打開數據庫
        OdbcConnection con = new OdbcConnection(connection);
        //對數據庫進行操做
        OdbcCommand cmd = new OdbcCommand(sqlQuery,con);
        //根據表名,讀取數據到一個臨時表
        DataTable dt = new DataTable("Student");
        //try catch finally進行了異常處理,這個是好習慣,嘿嘿
        try
        {
            //打開數據庫
            con.Open();
            //讀取數據
            OdbcDataReader reader = cmd.ExecuteReader();
            //把數據加載到臨時表
            dt.Load(reader);
            //在使用完畢以後,必定要關閉,要否則會出問題
            reader.Close();
            //關閉數據庫
            con.Close();
        }
        catch (Exception ex)
        {
            Debug.Log(ex.ToString());
        }
        finally
        {
            //判斷數據庫是否打開,若是打開就關閉。
            if (con.State!=ConnectionState.Closed)
            {
                con.Close();
            }
            
            //釋放數據庫資源
            con.Dispose();
        }
        if (dt.Rows.Count>0)
        {
            //讀取數據
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                text = dt.Columns[0].ColumnName + " : " + dt.Rows[dt.Columns[0].ColumnName].ToString() + "  |  " + dt.Columns[1].ColumnName + " : " + dt.Rows[dt.Columns[1].ColumnName].ToString() + "  |  " + dt.Columns[2].ColumnName + " : " + dt.Rows[dt.Columns[2].ColumnName].ToString() + "  |  " + dt.Columns[3].ColumnName + " : " + dt.Rows[dt.Columns[3].ColumnName].ToString();
                Debug.Log(dt.Columns[0].ColumnName + " : " + dt.Rows[dt.Columns[0].ColumnName].ToString() + "  |  " + dt.Columns[1].ColumnName + " : " + dt.Rows[dt.Columns[1].ColumnName].ToString() + "  |  " + dt.Columns[2].ColumnName + " : " + dt.Rows[dt.Columns[2].ColumnName].ToString() + "  |  " + dt.Columns[3].ColumnName + " : " + dt.Rows[dt.Columns[3].ColumnName].ToString());
            }
        }
    }
    public void OnGUI()
    {
        GUI.Label(new Rect(10,10,500,200),text);
    }
}
下一步,咱們生成exe文件.執行完畢以後,咱們打開生成的程序截圖以下:
爲何會出現這個問題。我在u3d裏面看到了他的顯示啊,以下:
其實呢,咱們在部署的時候,要把數據庫文件,copy到生成的文件夾下就能夠啦!

再次運行程序,查看效果。以下:
 
好,看到這裏,你應該知道了,我今天重點要說的就是這個問題啦!
下面是我在製做demo時,遇到的問題還有些是我特地測試須要注意的地方:
注意:
1. 必定要記住的是,訪問Access數據庫時,那兩個dll缺一不可,缺乏就會出現問題。
2. 在帶有dll動態連接庫的項目,要在打包時設置他的API兼容層級爲.NET 2.0。
3. 使用不一樣版本的Access數據庫要對應不一樣版本相對應的後綴名。
4. 若是想單首創建一個存放Access數據庫的文件夾,你須要在code時,找到這個文件夾,而後打包以後,把你的Access數據庫放到與code相對應的位置。要否則,檢測不到數據庫。
5. 在建立數據庫時要認真,嘿嘿,有多是你的文件名字和後綴名之間多個空格,你的數據也會讀不出,在u3d中運行,會提示你未知文件。
6. 就是老生常談的話題了,sql查詢語句必定要記住,拼寫正確,標點符號也要對應起來,要否則,出現個小問題,會讓你DT很久。曾經在作應用時,也DT過。嘿嘿!
 
就先總結這幾點吧!有什麼問題,咱們在一塊交流進步啦!
最後還想說,在我逃離IT以前,我會努力的前行,爲了我能夠早點離開!
 
DLL下載
http://pan.baidu.com/s/1jGwU8Wu
相關文章
相關標籤/搜索