[转载]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
相关文章
相关标签/搜索