Unity 连接 Mysql

导航:


连接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,不知道是我的问题还是,我自己测试不成功

猜你喜欢

转载自blog.csdn.net/u014147126/article/details/81984984