Unity 连接 Mysql

本文详细介绍如何使用Unity和C#连接MySQL数据库,包括连接配置、MysqlCommand、MysqlDataReader、Dataset和DataAdapter的使用方法,以及如何执行SQL语句、读取数据和填充数据集。

导航:


连接Mysql

与其说是Unity连接Mysql,不如说是C#连接Mysql , 一样的连接方法
不过,Unity调用Dll还真是麻烦,具体连接看Momo大神

private MysqlConnection sqlCon;
private void ConnectSQL()
{
    string userId = "root", pass = "root";
    string connect = "server=localhost;User Id=" + userId + ";password=" + pass + ";Database=unity";
    sqlCon = new MySqlConnection(connect);
    sqlCon.Open();
}

如果是远程数据库,则把local host改成 服务器名

MysqlCommand

属性说明
CommandType获取或设置Command对象要执行命令的类型,CommandType有三种枚举类型,Text(默认),storeProcedure(存储过程),TableDirect(读取的表名)
CommandText获取或设置要对数据源执行的 Mysql 语句、存储过程名或表名
Connection获取或设置Command对象使用的Connection对象的名称
Parameters获取Command对象所需要使用的参数集合(Mysql下测试不成功,不知道哪里出错了)
方法说明
ExecuteNonQuery执行非Select语句,返回所影响的行数
ExecuteScalar执行Select查询命令,返回数据中第一行第一列的值,常用来执行那些用到Count或Sum函数的Select命令
ExecuteReader执行Select命令,返回MysqlDataReader对象

更加详细的使用可以参考博文SqlCommand,用法其实差不多
构造MysqlCommand

private MysqlCommand sqlCom;
1、sqlCom  = sqlCon.CreateCommand();
2、sqlCom = new MysqlCommand();
   sqlCom.connection = sqlCon;
3、sqlCom = new MysqlCommand(CommandText, sqlCon);

以上三种都可以,也差不多,sqlCon为MysqlConnection,CommandText为要执行的Mysql语句
利用MysqlCommand来说相对(MySqlDataAdapter)更方便。

MysqlDataReader

MysqlDataReader对象是一个简单的数据集,常用于检索大量数据,MysqlDataReader对象再内存中只保留一行,系统开销非常小,但读取数据时必须保持与数据库的连接,读取速度也快于Dataset,读取完数据要断开连接

属性说明
HasRows判断数据库中是否有数据
FieldCount获取当前行的列数
RecordAffected获取执行Mysql语句所更改、添加或删除的行数
方法说明
Read使MysqlDataReader前进到下一条记录
Close关闭MysqlDataReader对象
Get获取当前行的某一列的数据,(更习惯通过下标获取)

基本操作演示

private void ReadData()
{
    MysqlDataReader reader = sqlCom.ExecuteReader();
    if(reader.HasRows)
    {
        while(reader.Read())
        {
            //reader["id"],类似操作
        }
    }
    // 用完一定要关闭,否则会出现占用的情况
    reader.Close();
    sqlCon.Close();
}

Dataset

Dataset创建在内存中的集合对象,可包含任意数量的数据表及表约束、索引和关系等。
Dataset组成
Dataset组成如图,因此Dataset中包含多张DataTable,每张DataTable包含多个DataColumn和多个DataRow。其中DataTable区分大小写。

DataTableCollection常用属性说明(见其名知其义者不写说明)
Count
Item[string]获取名称为**的DataTable
以下为方法
Add
Clear
Contains是否包含某个名称的Data Table
IndexOf
Remove
RemoveAt

更常用的是下标获取,sets.tables["name"] 或者 sets.tables[0],sets为Dataset对象

DataTable常用属性说明(见其名知其义者不写说明)
Columns
Dataset获取该表所属的Dataset
HasErrors获取一个值,该值表示该表所属的Dataset的任何表的任何行中是否有错误
PrimaryKey获取或设置充当数据表主键的列的数组
Rows
以下为方法
Clear
Copy复制结构和数据
Merge合并当前Table和指定的Table
NewRow创建具有相同架构的DataRow
DataRowCollection常用属性说明(见其名知其义者不写说明)
Count
Item获取指定索引处的行
以下为方法
Add
Clear
Find
……
DataRow常用属性说明(见其名知其义者不写说明)
HasErrors获取一个值,指示某行是否包含错误
Item[string或Int32]获取指定的列的数据
ItemArray通过一个数组获取或设置此行的所有值
table所属的Table
以下为 方法
IsNull指定的列是否为null

DataColumn与DATa Row类似,不作说明

DataAdapter

DataAdapter,一般用于填充Dataset,以及把Dataset对象所做的更改写入到数据源中

属性说明
SelectCommand获取或设置在于数据源中 选择记录 的命令
InsertCommand获取或设置在于数据源中 插入新记录 的命令
UpdateCommand获取或设置在于数据源中 更新记录 的命令
DeleteCommand获取或设置在于数据源中 删除记录 的命令
方法说明
Fill从数据源中提取数据填充Dataset
Update更新数据源

基本演示

DataSet sets = new DataSet();
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = new MySqlCommand("Select * from info", sqlCon);
adapter.Fill(sets);
//adapter.ContinueUpdateOnError = true;
string insertText = "Insert into info values('" + nameInfo + "', '" + sexInfo + "', '" + messageInfo + "')";
adapter.InsertCommand = new MySqlCommand(insertText, sqlCon);
//MySqlCommandBuilder mySqlCommandBuilder = new MySqlCommandBuilder(adapter);
DataRow newRow = sets.Tables[0].NewRow();
//newRow[0] = nameInfo;
//newRow[1] = sexInfo;
//newRow[2] = messageInfo;
sets.Tables[0].Rows.Add(newRow);
if (adapter.Update(sets) > 0)
{
   GameObject newItem = GameObject.Instantiate(item, parent, false);
    AddItem(newItem, nameInfo, messageInfo);
}

更加详细可以看博文DataAdapter用法,对于文中提及的MySqlCommandBuilder,不知道是我的问题还是,我自己测试不成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值