zoukankan      html  css  js  c++  java
  • 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";
    		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制作途径。能够很好得做出自己想要的效果。

    我总结的基本就这么多了,有不足的地方欢迎大家批评指正!!!谢谢~~~~~~~~

  • 相关阅读:
    《网络攻防》实验八:Web基础
    《网络攻防》实验七:网络欺诈技术防范
    《网络攻防》实验六:信息搜集与漏洞扫描
    《网络攻防》实验五:MSF基础应用
    《网络攻防》实验四:恶意代码分析
    《网络攻防》实验三:免杀原理与实践
    《网络攻防》实验二:后门原理与实践
    20145213《网络对抗》逆向及Bof基础
    《课程设计》——cupp的使用
    《课程设计》——foremost的使用
  • 原文地址:https://www.cnblogs.com/backlighting/p/5276429.html
Copyright © 2011-2022 走看看