Unity中对SQL数据库的操作
在Unity中,我们有时候需要连接数据库来达到数据的读取与储存。⽽在.NET平台下,ADO.NET为我们提供了公开数据访问服务的类。客户端应⽤程序可以使⽤ADO.NET来连接到数据源,并查询,添加,删除和更新所包含的数据。
对于ADO.NET,需要了解到Connection,Command,DataReader,DataAdapter,DataSet这⼏个对象,他们是操作数据库的重要对象。下⾯简要得介绍下这⼏个对象的作⽤以及功能(以SQL为例)。
1、Connection:它是建⽴应⽤程序与数据库之间的连接通道,起到连接数据库的功能。其访问形式根据数据库的类型⽽定。以SQL为例,则连接类型为SqlConnection。这种连接需要引⼊相应数据库的命名空间,这⾥我们需要引⼊System.Data.SqlClient。想要引⼊这个命名空间还需要System.Data.dll⽂件,就在Unity安装源⽬录下即可到,复制导⼊Unity的Asset即可。
写法如下:
//声明⼀个字符串⽤于存储连接数据库字符串
string s = "server=localhost;database=hasion;uid=sa;pwd=hasion";
SqlConnection con = new SqlConnection(s);
con.Open();
这样数据库的连接就打开了。
2、Command:当应⽤程序建⽴与数据源的连接后,就需要Command对象来执⾏命令并从数据源中返回结果。它是⼀个数据命令对象,主要功能就是向数据库发送查询、更新、删除、修改操作的SQL语句。这边需要讲下它执⾏SQL的⼏种⽅法:ExecuteNonQuery⽅法,该⽅法是返回受影响的⾏数可⽤于统计,(如需进⾏存储过程则需更改CommandType的属性)。
写法如下:
//声明⼀个字符串⽤于存储连接数据库字符串
string s = "server=localhost;database=hasion;uid=sa;pwd=hasion";
datagridview数据源SqlConnection con = new SqlConnection(s);
con.Open();
//创建SqlCommand对象,并指定其使⽤con连接数据库
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
//设置CommandText,设置其执⾏SQL语句
cmd.CommandText="update Table_1 set 资产=1000 where 性别='⼥'";
int i = Convert.ToInt32 (cmd.ExecuteNonQuery ());
print ("查询到"+i+"个⼥性");
ExecuteScalar⽅法,返回结果集合的第⼀⾏的第⼀列,常⽤语统计数据数量,⽤法如下:
//声明⼀个字符串⽤于存储连接数据库字符串
string s = "server=localhost;database=hasion;uid=sa;pwd=hasion";
SqlConnection con = new SqlConnection(s);
con.Open();
/
/创建SqlCommand对象,并指定其使⽤con连接数据库
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
//设置CommandText,设置其执⾏SQL语句
cmd.CommandText="select * from Table_1 where 性别='⼥'";
int i = Convert.ToInt32 (cmd.ExecuteScalar ());
print ("查询到"+i+"个⼥性");
ExecuteReader⽅法,返回⼀个SqlDataReader对象,可进⾏数据的读取,其⽤法如下:
//声明⼀个字符串⽤于存储连接数据库字符串
string s = "server=localhost;database=hasion;uid=sa;pwd=hasion";
SqlConnection con = new SqlConnection(s);
con.Open();
//创建SqlCommand对象,并指定其使⽤con连接数据库
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
//设置CommandText,设置其执⾏SQL语句
cmd.CommandText="select * from Table_1";
SqlDataReader st = cmd.ExecuteReader ();
while (st.Read())
{
print(st[0].ToString());
}
cmd.Dispose ();
上⾯的功能就是输出表格第⼀列的所有内容。
3、DataReader:这个就不做解释了,就是使⽤ExecuteReader 中返回的对象,具体形式上⾯已经写出。
4、DataAdapter:数据适配器,是DataSet与数据源之间的桥梁。它有两种⼯作形式:⼀种是通过Command对象执⾏SQL语句,从数据源中检索数据,并将检索到的数据填充到DataSet对象,还有⼀种是把对DataSet对象所做的更改写⼊数据源(为了⽅便,下⾯以vs的windows 应⽤程序为例来展现其具体⽤法,因为其DataGridView能够很好的展现表格数据)。其第⼀种⽤法如下(也就是填充DataSet数据集):
//声明⼀个字符串⽤于存储连接数据库字符串
string s = "server=localhost;database=hasion;uid=sa;pwd=hasion";
SqlConnection con = new SqlConnection(s);
//创建SqlCommand对象,并指定其使⽤con连接数据库
SqlCommand cmd = new SqlCommand("select * from Table_1",con);
//创建SqlDataAdapter对象
SqlDataAdapter sda = new SqlDataAdapter ();
//指定Command
sda.SelectCommand = cmd;
//创建DataSet对象
DataSet ds = new DataSet ();
sda.Fill (ds);
DataGridView.DataSource = ds.Tables [0];
这⾥是使⽤DataAdapter对象的Fill⽅法填充DataSet数据集,Fill⽅法使⽤Select语句从数据源中检索数据。需要注意的是,与Select命令关联的Connection对象必须有效,但不需要将其打开。
还有⼀种⽤法就是更新数据源,就是使⽤DataAdapter的Update⽅法,可以将DataSet中修改过的数据及时地更新到数据库中。⽤法如下:
SqlConnection con = null;
SqlDataAdapter sda;
DataSet ds;
private void button1_Click(object sender, EventArgs e)
{
con = new SqlConnection("server=localhost;database=hasion;uid=sa;pwd=hasion");
//SqlCommand com = new SqlCommand("select * from Table_1", con);
sda = new SqlDataAdapter("select * from Table_1", con);
// sda.SelectCommand = com;
ds = new DataSet();
sda.Fill(ds, "cs");
dataGridView.DataSource = ds.Tables[0];
}
private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//显⽰每⾏数据
textBox1.Text = dataGridView.SelectedCells[0].Value.ToString();
textBox2.Text = dataGridView.SelectedCells[1].Value.ToString();
textBox3.Text = dataGridView.SelectedCells[2].Value.ToString();
textBox4.Text = dataGridView.SelectedCells[3].Value.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
//创建⼀个DataTable
DataTable dt = ds.Tables["cs"];
//把表机构加载到Table_1中
sda.FillSchema(dt, SchemaType.Mapped);
//创建DataRow,并设置DataRow中的值
DataRow dr = dt.Rows.Find(textBox1.Text.Trim());
dr["sex"] = textBox2.Text.Trim();
dr["age"] = textBox3.Text.Trim();
dr["money"] = textBox4.Text.Trim();
/
/实例化⼀个SqlCommadnbuilder
SqlCommandBuilder cmb = new SqlCommandBuilder(sda);
//更新数据库
sda.Update(dt);
}
这样就可以对数据库中的数据进⾏修改了。
5、DataSet:其实上⾯已经⽤到了这个对象,他是整个体系的核⼼,其数据来源于数据库或者XML,为了从数据库中获取数据,需要使⽤数据适配器从数据中查询数据。
C#连接数据库基本原理和⽅法就是上⾯这些了。以上的这些⼀般在连接数据库中都会⽤得到。这些也是我⾃⼰通过看书琢磨出来的⼀些东西,都是基础的部分,更为复杂的数据库连接则需要具体情况具体对待。
下⾯举个例⼦:下图是在SQL中建⽴的⼀个简单的表格
在Unity中,我们如何将读取到的数据呈现出来,利⽤上⾯的那些完全可以做到。下⾯贴出主要⽅法,仅供参考:using UnityEngine;
using System.Collections;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
public class SQLConnection : MonoBehaviour {
SqlConnection con=null;
SqlDataAdapter sda=null;
//接受数据变量
private string str;
void Start()
{
//创建连接
con = new SqlConnection ("server=localhost;database=hasion;uid=sa;pwd=hasion");
/
/执⾏sql
sda=new SqlDataAdapter ("select * from Table_1", con);
//实例化数据集,并写⼊查询到的数据
System.Data.DataSet ds = new System.Data.DataSet ();
sda.Fill (ds, "table");
//按⾏和列打印出数据
for (int i=0; i<ds.Tables[0].Rows.Count; i++) {
for(int j=0;j<ds.Tables[0].Columns.Count;j++)
{
str+=ds.Tables[0].Rows[i][j].ToString().Trim()+" ";
if(j==ds.Tables[0].Columns.Count-1)
{
print(str);
str="";
}
}
}
}
}
脚本执⾏之后,会打印出下⾯的结果:
数据既然能够呈现出来,我们就可以进⾏其他进⼀步的操作了,⽐如制作表格,程序中的逻辑控制啊等等很多功能,这些等以后遇到了在具体问题具体对待了。
当然sql的语句有很多,增删改查都可以这样操作,然后再配合Unity的GUI或者NGUI等等UI制作途径。能够很好得做出⾃⼰想要的效果。
我总结的基本就这么多了,有不⾜的地⽅欢迎⼤家批评指正谢谢~~~~~~~~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论