ui、
在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 方便谈论、交流~