12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 6693|回复: 12
打印 上一主题 下一主题

[教程] Unity3D 访问 Access 数据库的范例

[复制链接]

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2012-9-27 00:02:30 |只看该作者 |倒序浏览
(来源: Mr.野猪)

                                       

在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来。写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过程中遇到了问题,我看了给他解决掉之后,为了其他朋友不至于发生同类的问题,特在此唠叨一番。在开始主题之前呢,我真的想说,北京的公交太不给力了,我这几天,每次等公交都要一个多小时,直接崩溃中。好,闲话不扯啦!下面开始我的教程之旅吧!



Access数据库呢,是一个轻量级的数据库,以前在学习.net应用开发的时候了解过。在pc的软件开发中,很多时候,我们存储的数据量不会很大的情况都会选择他,主要他轻量级,容易部署。更多Access的问题,可以去微软的官网查看。



在U3D中要访问Access数据库,我们需要用到两个dll,System.Data.dll和System.EnterpriseServices.dll,缺一不可。我们找到这两个dll放到u3d的Plugins文件夹下面。

下面我们创建一个Access数据库版本是07样式是*.accdb(03版本的Access数据库的样式为*.mdb)在我们进行code的时候,要根据不同的版本进行判断啦,对于不同的Access数据库版本,我们要对应不懂的文件后缀名。要不然会提示你数据库文件是未知文件。

下面是读取Access的一个demo,其他的修改,添加数据都是在修改他的sql语句啦,相关的知识,可以查看Access在.net中如何对Access进行CURD操作的。简单的代码如下:



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);

    }

}



下一步,我们生成执行文件.执行完毕之后,我们打开生成的程序截图如下:







为什么会出现这个问题。我在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过。嘿嘿!




分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2012-9-27 15:29:28 |只看该作者
感谢Mr.野猪的热情提供技术文章
回复

使用道具 举报

may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

板凳
发表于 2012-11-30 21:59:47 |只看该作者
支持楼主的帖子
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-12-1 01:13:25 |只看该作者
野猪好像很久没新的教程了啊,,请大神继续发教程
回复

使用道具 举报

1

主题

1

听众

81

积分

设计初学者

Rank: 1

纳金币
8
精华
0

活跃会员 灌水之王

5#
发表于 2013-5-28 13:22:58 |只看该作者
灰常感谢!!!
回复

使用道具 举报

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2013-5-31 01:30:18 |只看该作者
不错的介绍,轻型数据库用的上
回复

使用道具 举报

0

主题

2

听众

244

积分

设计实习生

Rank: 2

纳金币
9
精华
0

最佳新人

7#
发表于 2013-5-31 20:42:50 |只看该作者
感謝大大無私地分享~
回复

使用道具 举报

0

主题

1

听众

8

积分

设计初学者

Rank: 1

纳金币
5
精华
0

活跃会员 灌水之王

8#
发表于 2013-6-1 01:05:28 |只看该作者
有没有MYSQL的
回复

使用道具 举报

0

主题

1

听众

149

积分

设计实习生

Rank: 2

纳金币
54
精华
0

最佳新人

9#
发表于 2013-6-2 23:02:52 |只看该作者
感謝分享~~
回复

使用道具 举报

12

主题

1

听众

609

积分

初级设计师

Rank: 3Rank: 3

纳金币
309
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2013-7-30 13:11:35 |只看该作者
本帖最后由 筱筱 于 2013-8-6 14:06 编辑

怎么添加新数据啊?我添加数据了发现表里面没有~~求指点,求解答
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-15 10:30 , Processed in 0.250047 second(s), 27 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部