分享

关于Unity3D中连接数据库的一些想法

 阿修罗之狮猿授 2015-12-10

今天想到UNITY与MSSQL,就测试了一下。

    我先在MSSQL中建立了一张表叫“Say”,Say有一个字段info里面存放着我要在unity3D中要显示出来的内容.在网上搜索了一些,都是说先从Unity\Editor\Data\Frameworks\Mono.framework中复制出System.Data.dll文件然后在unity3D项目中导入。

    很不幸,我用的是Unity3D 3.3版本,所以...就找不到他们说的DLL,这个想法先断了断,我想,如果能导入DLL,为什么我不自己写一个DLL导入进去呢,SQL操作在DLL中完成就可以了。我在Unity中只需要调用。

    于是,我便写了一个类:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace SayHello
{
    public class sayHello
         

            public DataSet say(){
            string Conn = "server=127.0.0.1;database=testsql;uid=sa;pwd=sa";
            SqlConnection conn = new SqlConnection(Conn);
            string sSql = "select * from say";
            SqlDataAdapter da = new SqlDataAdapter(sSql, conn);
            DataSet ds = new DataSet();
            da.Fill(ds);

            conn.Close();
            return ds.Tables[0].Rows[0][0].ToString();
        }
    }
}

 

    然后我用这个类生成了一个DLL,SayHello.dll,再Unity3D中这样导入.

首先将SayHello.dll复制到Assets文件夹下,然后在Unity3D使用using导入,就像是这样:

 

using SayHello;

 

然后在Start中这样写:

 

 void Start () {
  sayHello my = new sayHello();
  print(my.testsql());
 }

 

    如果是SQL2000版本,要注意一个问题,必须升级到SP4版本,否则会出异常,异常描述是:目标机器积极拒绝连接。这是因为MSSQLSP4以下版本不可以外连。这点需要注意。

    在平时处理数据中,不可能一个方法只返回一条string,这是不能接受的。但是我们在Unity3D中又没有DataSet,如何接收它呢?

    没办法,想想那个DLL,就算改版了也要找吧,其实只是变了个位置而已,最后还是找到这个DLL了。

接着我直接在Unity3D中做了一个直连数据库,代码我就不放了,光是定义SqlConnection的时候就已经出错了,说是什么版本、数据集的错误。我直接就无视这个套路了。反正已经能够定义接收的变量了

    然后是这样,修改了return,直接return ds;

在Unity3D中,我是这样写的:

using UnityEngine;
using System.Collections;
using SayHello;
using System.Data; //这里必须要找到System.Data.dll才能导入
public class MySayHello : MonoBehaviour {

 // Use this for initialization
 void Start () {
  sayHello my = new sayHello();
  DataSet ds = my.testsql();
  for(int i=0;i<ds.Tables[0].Rows.Count;i++)
  {
   print(ds.Tables[0].Rows[i][0].ToString());
  }
 }
 
 // Update is called once per frame
 void Update () {
  
 }

 

我的控制台输出了:

Hello My baby!

Hello Heyours

 

--------------------------------------------------------------------------------------------------

另外,我觉得这样直连非常的不好,正确的做法,至少是由客户端与服务器建立连接、或者说建立关系,客户端发送请求,由服务端操作数据库,不然……万一有某些大神,通过客户端得到数据库账号密码。。想到这,我蛋猛的抽动了一下。。

 - -#。。。

 

欢迎各位脚本大神加群3222603 方便谈论、交流~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多