2013-12-04 11:14:50 Rechard0121 阅读数 3288

Unity3d 与mysql的连接

 

首先要下载一个 connect/Net 程序集,该程序集提供了C#与mysql连接的类

http://dev.mysql.com/downloads/connector/net/

根据mysql的说法,下载一个 .NET&Mono 平台的 无需安装的版本(例如:mysql-connector-net-6.7.4-noinstall.zip).

 

下载好了后,在 Document中可以看到帮助文档。然后,按照其中的例子,编写实例。

 

回到 Unity3d中,我使用了MonoDevelop工具。按照实例写代码,发现程序有错。提示是,没有System.Data,mysql命名空间,需要增加该命名空间的引用.

 

解决方法是:

1、将 Unity3d/Data/Mono/lib/mono/2.0中的System.Data.dll 拷贝到 Unity的 Assets下。

2、将 下载好的connect/Net包中的 v2/mysql.data.dll 拷贝到 Unity的 Assets 下。

 

这时,在Unity3d的Editor中,没有问题了。但是发布的时候问题来了。

如果你是发布的pc平台,你需要修改API 为 .NET 2.0

如果你是发布网络平台,在免费版中不能修改该设置。发布就出现了各种的 程序集 没有的错误,我的解决方法是将所有需要的 程序集(Unity3d/Data/Mono/lib/mono/2.0/)都拷进去。

 

然后,就可以正常的发布了。但是,当我们真正的运行的时候,问题再一次会出现。当你需要和数据库进行交互的时候,并不能正常的工作。

 

对于pc平台,在你生成的工程的 日志 文件中可以看到错误。大概的意思就是,你使用了一个值为空的实例。

解决方案是:将 Unity3d /Data/Mono/lib/mono/unity 中的I18N.dll 和 I18N.west.dll 加到项目中,就可以正常的访问数据库了。

 

对于网页而言,应该要使用 unity 中的 www 来调用服务器中处理数据库的操作。有待更新。。。。

 

2015-12-06 09:58:28 baidu_28955655 阅读数 209
[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Net;  
  7. using System.Net.Sockets;  
  8. using System.Threading;  
  9.   
  10. public class Client : MonoBehaviour  
  11. {   
  12.     public string ipAddress = "127.0.0.1";  
  13.     IPAddress ip;  
  14.     Socket socket;  
  15.     // Use this for initialization  
  16.     void Start()  
  17.     {  
  18.         ip = IPAddress.Parse(ipAddress);  
  19.         socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
  20.         socket.Connect(new IPEndPoint(ip, 8885));  
  21.     }  
  22.   
  23.     // Update is called once per frame  
  24.     void Update()  
  25.     {  
  26.   
  27.     }  
  28.   
  29.     void OnGUI()  
  30.     {  
  31.   
  32.         if (GUI.Button(new Rect(0, 20, 100, 20), "Connect"))  
  33.         {  
  34.             socket.Send(Encoding.ASCII.GetBytes("test,123456"));  
  35.         }  
  36.     }  
  37. }  

 

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using ProtoBuf;  
  5. using System.Net;  
  6. using System.Data;  
  7. using System.Net.Sockets;  
  8. using System.Threading;  
  9. using MySql.Data.MySqlClient;  
  10.   
  11. namespace CenterServer  
  12. {  
  13.     class Program  
  14.     {  
  15.         private static byte[] result = new byte[1024];  
  16.         private static Socket serverSocket;  
  17.         private static int serverPort = 8885;  
  18.   
  19.   
  20.         static void Main(string[] args)  
  21.         {  
  22.   
  23.             IPAddress ip = IPAddress.Parse("127.0.0.1");  
  24.             serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
  25.             serverSocket.Bind(new IPEndPoint(ip, serverPort));  
  26.             serverSocket.Listen(100);  
  27.             Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());  
  28.             //通过Clientsoket发送数据    
  29.             Thread myThread = new Thread(ListenClientConnect);  
  30.             myThread.Start();  
  31.   
  32.             Console.ReadLine();  
  33.         }  
  34.   
  35.         /// <summary>    
  36.         /// 监听客户端连接    
  37.         /// </summary>    
  38.         private static void ListenClientConnect()  
  39.         {  
  40.             while (true)  
  41.             {  
  42.                 Socket clientSocket = serverSocket.Accept();  
  43.                 clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));  
  44.                 Thread receiveThread = new Thread(ReceiveMessage);  
  45.                 receiveThread.Start(clientSocket);  
  46.             }  
  47.         }  
  48.   
  49.         /// <summary>    
  50.         /// 接收消息    
  51.         /// </summary>    
  52.         /// <param name="clientSocket"></param>    
  53.         private static void ReceiveMessage(object clientSocket)  
  54.         {  
  55.             Socket myClientSocket = (Socket)clientSocket;  
  56.   
  57.             while (true)  
  58.             {  
  59.                 try  
  60.                 {  
  61.                     //通过clientSocket接收数据    
  62.                     int receiveNumber = myClientSocket.Receive(result);  
  63.                     string[] message = Encoding.ASCII.GetString(result, 0, receiveNumber).Split(',');  
  64.                     string userName = message[0];  
  65.                     string passWord = message[1];  
  66.                     SQLHelper helper = new SQLHelper();  
  67.                     string sql = string.Format("SELECT * FROM test.account where account_name='" + userName + "'");  
  68.                     DataTable dt = helper.Selectinfo(sql);  
  69.                     if ((string)dt.Rows[0]["account_password"] == passWord)  
  70.                     {  
  71.                         Console.WriteLine(userName + " 登录验证成功");  
  72.                     }  
  73.                     else  
  74.                     {  
  75.                         Console.WriteLine(userName + " 登录验证失败");  
  76.                     }  
  77.                 }  
  78.                 catch (Exception ex)  
  79.                 {  
  80.                     Console.WriteLine(ex.Message);  
  81.                     myClientSocket.Shutdown(SocketShutdown.Both);  
  82.                     myClientSocket.Close();  
  83.                     break;  
  84.                 }  
  85.             }  
  86.         }  
  87.   
  88.         public class DBHelper  
  89.         {  
  90.             public MySqlConnection GetConn()  
  91.             {  
  92.                 MySqlConnection mysqlConn = new MySqlConnection("Database='" + "test" + "';Data Source='" + "localhost" + "';User Id='" + "root" + "';Password='" + "" + "'");    
  93.                 return mysqlConn;  
  94.             }  
  95.         }  
  96.   
  97.         public class SQLHelper : DBHelper  
  98.         {  
  99.             /// <summary>  
  100.             /// 查询操作  
  101.             /// </summary>  
  102.             /// <param name="sql"></param>  
  103.             /// <returns></returns>  
  104.             public DataTable Selectinfo(string sql)  
  105.             {  
  106.                 MySqlConnection mysqlconn = null;  
  107.                 MySqlDataAdapter sda = null;  
  108.                 DataTable dt = null;  
  109.                 try  
  110.                 {  
  111.                     mysqlconn = base.GetConn();  
  112.   
  113.                     sda = new MySqlDataAdapter(sql, mysqlconn);  
  114.                     dt = new DataTable();  
  115.                     sda.Fill(dt);  
  116.   
  117.                     return dt;  
  118.                 }  
  119.                 catch (Exception)  
  120.                 {  
  121.                     throw;  
  122.                 }  
  123.   
  124.             }  
  125.   
  126.             /// <summary>  
  127.             /// 增删改操作  
  128.             /// </summary>  
  129.             /// <param name="sql">sql语句</param>  
  130.             /// <returns>执行后的条数</returns>  
  131.             public int AddDelUpdate(string sql)  
  132.             {  
  133.   
  134.                 MySqlConnection conn = null;  
  135.                 MySqlCommand cmd = null;  
  136.   
  137.                 try  
  138.                 {  
  139.                     conn = base.GetConn();  
  140.                     conn.Open();  
  141.                     cmd = new MySqlCommand(sql, conn);  
  142.                     int i = cmd.ExecuteNonQuery();  
  143.                     conn.Close();  
  144.                     return i;  
  145.                 }  
  146.                 catch (Exception)  
  147.                 {  
  148.   
  149.                     throw;  
  150.                 }  
  151.                   
  152.             }  
  153.         }  
  154.     }  
  155. }  


2018-12-17 15:33:20 duan_1998 阅读数 198

前言:这几天用Unity3d与Mysql制作了一个汽车租赁系统,enmmm(无奈之举),里面有用到Mysql的一些操作,因为自己不常用,所以就记不住,所以索性这次记录一下。 

  • 准备 

需要在UnityProject里新建一个文件夹,命名:Plugins,下一步就是有两个文件需要放进去,这里放一下链接

链接:https://pan.baidu.com/s/1v3CuVxlee8ckpJKrxKSFcw 
提取码:502c 
<这里的dll文件Unity2017可以用,其他版本暂时没试过。。>

  •  代码部分<1>
  • <连接>
public static MySqlConnection mysqlConnection;
private static string database = "Test1";//数据库名
private static string host = "127.0.0.1";//本地
private static string id = "root";//用户名
private static string pwd = "123456";//密码



public void Init()
{
    string sqlString = string.Format("Database={0};Data Source={1};User Id=                
                 {2};Password={3};", database, host, id, pwd, "3306");
    mysqlConnection = new MySqlConnection(sqlString);
}
public void Insert(string tablename,string str1Name,string str1)
{
    mysqlConnection.Open();
    string sql =string.Format("insert into {0} set {1}=@a", tablename,str1Name);
    MySqlCommand command = new MySqlCommand(sql, mysqlConnection);
    command.Parameters.AddWithValue("a", str1);//将sql语句中的a置换成str1,可能你会问,为啥不直接format,因为在sql语句中,有时候要加'',所以用Parameters更保险.
    return command.ExecuteReader();
    mysqlConnection.Close();
}
public void Delete(string tablename,string str1Name,string str1)
{
    mysqlConnection.Open();
    string sql=string.Format("delete from {0} where {1}=@a",tablename,str1Name);
    MySqlCommand cmd = new MySqlCommand(sql,mysqlConnection);
    cmd.Parameters.AddWithValue("a", str1);
    cmd.ExecuteNonQuery();
    mysqlConnection.Close();
}
public void Delete(string tablename,string str1Name,string str1,string str2Name,string str2)
{
    mysqlConnection.Open();
    string sql=string.Format("update {0} set {1}=@a where {2}=@b",tablename,strName,str2Name);
    MySqlCommand cmd = new MySqlCommand(sql,mysqlConnection);
    cmd.Parameters.AddWithValue("a", str1);
    cmd.Parameters.AddWithValue("b", str2);
    cmd.ExecuteNonQuery();
    mysqlConnection.Close();
}
public MySqlDataReader Select(string tablename,string str1Name,string str1)
{
    string sql =string.Format("select * from {0} where {1}=@u", tablename,str1Name);
    MySqlCommand command = new MySqlCommand(sql, mysqlConnection);
    command.Parameters.AddWithValue("u", str1);
    return command.ExecuteReader();
}

 

  • 代码部分<2>
  • PS
  1. 代码部分1主要是四种操作,查询的返回值类型是MySqlDataReader类,那么他怎么获取数据呢?

下面这一段是获取数据库表carinfo里的数据用来生成car实体。

public List<Car> GetCarList()
{
    mysqlConnection.Open();
    MySqlDataReader reader = Select("carinfo", "state_car", "Idle");
    List<Car> carList = new List<Car>();
    while (reader.Read())
    {
        carList.Add(new Car(reader.GetInt32("id_car"), reader.GetString("vendor_car"), reader.GetString("model_car"), reader.GetInt32("money_car")));
    }
    mysqlConnection.Close();
    return carList;
}
  1. 好像忘了一点哦,引入命名空间不要忘了哦
using MySql.Data.MySqlClient;
using System.Data;

 

2020-01-26 14:03:43 sinat_34337520 阅读数 15

目录

1. Navicat 建数据库(这里不介绍MySQL跟Navicat安装以及环境配置)

2. 导入 UnityMySQL.unitypackage


Unity3D连接MySQL(二)讲解篇

前期开发时候,一般需要先在本地 mysql 模拟数据功能,功能开发完毕后,再与后台对接,本篇介绍如何使用 Unity 连接、访问 mysql。(附件在文末)

Unity 2018.3.14

首先介绍连接方法,log显示正常连接后,再来讲解代码。

1. Navicat 建数据库(这里不介绍MySQL跟Navicat安装以及环境配置)

连接名随意,但是ip、端口、用户名、密码需要固定,密码:123456 

在刚刚新建的连接上,右键,选择运行 SQL 文件,选择文末附件中的 student.sql 文件。

 

然后右键 luo,选择刷新,出现 student 数据库,打开后显示如下。

2. 导入 UnityMySQL.unitypackage

新建一个空的 Unity 项目,到 Project  视图,右键 Assets > Import Package > Custom Package。

选择 UnityMySQL.unitypackage,导入后项目结构如下,点击运行,查看log。

log 如下说明连接运行成功。 

 


附录:

链接:https://pan.baidu.com/s/1t5cvChJZyNY4siqaX8RuTQ 
提取码:hjxs

 

2020-01-26 14:48:38 sinat_34337520 阅读数 12

目录

1. 引入所需 dll 文件 

2. 代码流程

3. DataSet 解析


Unity3D连接MySQL(一)使用篇

1. 引入所需 dll 文件 

D:\Unity\2018.3.14f1\Editor\Data\Mono\lib\mono\2.0 

I18N.CJK.dll、I18N.dll、I18N.West.dll

MySql.Data 去 Mysql 官网下载 

Unity目录下添加Plugins文件夹,将dll放进去 unity将会自动引用。

 

2. 代码流程

首先 Select() 拼接 sql 语句,而后 ExecuteQuery() 执行sql语句,返回 DataSet

using (var connection = GetSqlConn()) 获取数据库连接

connStr 封装好连接数据库的 conn 参数,这里的参数要跟 Navicat 里面数据库连接匹配

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using System;

public class SqlHelper
{
    private static SqlHelper _instance = new SqlHelper();
    private static string connStr = "Database=student;Data Source = 127.0.0.1; User Id = root; Password=123456;port=3306";
    public static SqlHelper Instance
    {
        get
        {
            return _instance;
        }
    }

    /// <summary>
    /// 获取连接
    /// </summary>
    /// <returns></returns>
    public static MySqlConnection GetSqlConn()
    {
        MySqlConnection sqlConn = null;
        sqlConn = new MySqlConnection(connStr);
        return sqlConn;
    }

    
    /// <summary>
    /// 查询指定字段
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="items"></param>
    /// <returns></returns>
    public static DataSet Select(string tableName, string[] items)
    {
        string query = "SELECT " + items[0];
        for (int i = 1; i < items.Length; ++i)
        {
            query += ", " + items[i];
        }
        query += " FROM " + tableName;
        Debug.LogFormat("query: {0}", query);
        return ExecuteQuery(query);
    }

    ......

    /// <summary>
    /// 执行查询语句,返回DataSet
    /// </summary>
    /// <param name="SQLString">查询语句</param>
    /// <returns>DataSet</returns>
    public static DataSet ExecuteQuery(string SQLString)
    {

        using (var connection = GetSqlConn())
        {
            DataSet ds = new DataSet();
            try
            {
                connection.Open();
                MySqlDataAdapter da = new MySqlDataAdapter(SQLString, connection);
                da.Fill(ds);
            }
            catch (MySqlException ex)
            {
                connection.Close();
                throw new Exception(ex.Message);
            }
            finally
            {
                connection.Close();
            }
            return ds;
        }
    }


}

 

3. DataSet 解析

数据集中获取数据表,数据表可以直接理解为数据库表的形式。

DataTable table = ds.Tables[0]; 拿第一个表即可

table.Rows[0][0].ToString()  获取对应位置的值

 

DataSet 数据集,可以自由移动指针,数据与DB断开。

DataTable 数据表

DataReader 数据处理速度快,但是只读,移到下一行就不能查看上一行数据

 

ds.Tables.Count - 返回表的数量,一个 select 返回一个 table

ds.Tables[0].Rows.Count - 第一个表的条数

ds.Tables[0].Rows[0].ItemArray[0] - 第一个表,第一条数据,第一个值

 

防止数组越界:取值前判断ds.Tables.Count、ds.Tables[0].Rows.Count等大小

 

    /// <summary>
    /// 从数据库查找
    /// </summary>
    private void getDevNameAllFromDB()
    {
        DataSet ds = new DataSet();
        ds = queryDevNameAllDB(ds);
        //拿到的table,一行多列
        if (ds != null)
        {
            DataTable table = ds.Tables[0];
            //Debug.LogFormat("列数:{0}", table.Columns.Count);
            Debug.LogFormat("查找数据库行数:{0}", table.Rows.Count);
            for (int i = 0; i < table.Rows.Count; i++)
            {
                Debug.LogFormat("table:{1} {2} {3} {4}", i, table.Rows[i][0].ToString(), table.Rows[i][1].ToString(),
                    table.Rows[i][2].ToString(), table.Rows[i][3].ToString());
                //Debug.LogFormat("table.Rows[{0}][1]:{1}", i, table.Rows[i][1].ToString());
                
            }
        }
    }

 

 

 

 

 

没有更多推荐了,返回首页