zoukankan      html  css  js  c++  java
  • unity3d 连接MSSql

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

        我先在MSSQL中建立了一张表叫“Say”,Say有一个字段info里面存放着我要在unity3D中要显示出来的内容.在网上搜索了一些,都是说先从UnityEditorDataFrameworksMono.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 方便谈论、交流~

  • 相关阅读:
    快速开始
    阿里为什么选择RocketMQ
    4 分布式消息队列的协调者
    9 首个Apache中间件顶级项目
    3、用适合的方式发送和接收消息
    2 生产环境下的配置和使用
    TOMCAT加载两次war包(重复加载)
    Google Protocol Buffer 的使用(二)
    Google Protocol Buffer 的使用(一)
    PostgreSQL及PostGIS使用
  • 原文地址:https://www.cnblogs.com/sunet/p/3370763.html
Copyright © 2011-2022 走看看