导航:
连接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中包含多张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,不知道是我的问题还是,我自己测试不成功