Unity关于SqlServer的操作 您所在的位置:网站首页 UNITY调用数据库 Unity关于SqlServer的操作

Unity关于SqlServer的操作

2023-07-14 03:00| 来源: 网络整理| 查看: 265

    使用版本,Unity2017.4.10 + VS2017 + SqlServer2012

=====================================ADO.Net方式访问SqlServer=====================================

     因为Unity所支持的.Net库版本问题,我们无法再Unity里面使用Linq直接访问数据库,所以只能使用这种比较复杂的方式来访问数据库。

    首先,说一下可能会出现的问题

1:我们想要使用ADO访问数据库,首先查看一下自己的版本,

然后,去到  C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0  这个文件夹中将System.Data 拖入自己的Plugins里面,记住,别拖VS的,因为版本不支持,命名空间会出现找不到的情况

2:访问相关,因为我们使用的并不是VS本身的类库,所以一些VS里面可以使用的名称,在Unity里面会出现协议不支持的错误,经过测试 (local)  . /  和主机名是会出现这种错误的,所以我们只能使用服务器地址,而如果是在本地测试,则直接使用 127.0.0.1即可

3:数据库相关:在你使用127.0.0.1这个地址访问数据库之前,记得先打开数据库,测试一下这个能否登录,如果登录失败,则

如果还是失败,但是使用自己的主机是可以登录的,那就先百度一下远程登录设置,在

================================================================================================

首先,设置一下数据库

当你设置完成后,记得使用127.0.0.1 用sa账号登录测试一下

之后,首先创建一个表,结构如下,nChar可以理解为是解析为Encoding.Unicode的字符串

 

 

==============================================代码=============================================

// SqlServer增删改查比较简单,此处就直接贴代码 using UnityEngine; using System.Data.SqlClient; class DataBase:MonoBehaviour { // 连接字符串 第一个是你的服务器地址 第二个使我们刚才创建的数据库 三 四 就是我们刚才设置的 SA private string connSer = "Data Source=127.0.0.1;Initial Catalog=你创建的数据库;User Id=账号;Password=密码"; private static Connection Conn { Get { SqlConnection conn = new SqlConnection(connSer); // 使用连接字符串创建一个连接 conn.Open(); // 打开连接 return conn; } } public static Test Select(string n)//查找数据 并返回 { DATA data = null; using (Conn) { try { //表示一个Sql 这里指向Conn的存储过程 SqlCommand select = new SqlCommand("select * from Test where name='" + n + "'", Conn); SqlDataReader sr = select.ExecuteReader(); // 使用上面的语句查询数据库 while (sr.Read()) // 读取数据 data = new DATA(sr["name"], sr["pwd"], sr["info"]); //类似于字典的操作 Debug.Log(data.name); } catch (SqlException ex) { Debug.LogError(ex.Message); } } return data; } } class DATA // 我们在数据库中创建的表结构 { public object name, pwd, info; public DATA(object name, object pwd, object info) { this.name = name; this.pwd = pwd; this.info = info; } } public static List SELECT() //上面查找数据的重载,表示查找全部数据 { List data = new List(); using (Conn) { try { SqlCommand select = new SqlCommand("select * from Test where name!=-1", Conn); SqlDataReader sr = select.ExecuteReader(); while (sr.Read()) data.Add(new DATA(sr["name"], sr["pwd"], sr["info"])); } catch (SqlException ex) { Debug.LogError(ex.Message); } } return data; }

2:Insert->插入数据: 注意,因为Name是主键,所以我们不可以插入一条已经存在的Name,解决方法就是在新建一张表,新增一个Id类型为Int的列为主键,并且在标识规范中选中让他自增加,然后把我们的相关数据Copy进新表中即可

插入代码的书写为 Insert into 表名(表中的字段)values(与字段对应的数据);

public static bool Insert(string name,string pwd,string info)}{ using (Conn) { if(Select(name).name != null) //如果已经存在 就直接返回false return false; SqlCommand insert = new SqlCommand(string.Fromat("insert into Test('name','pwd','info')values('{0}','{1}','{2}')",name,pwd,info),Conn); insert.ExecuteNonQuery(); if(Select(name).name != null) // 我们插入后存在 返回true return true; } return false; }

3:UPDATE(更新)-------------

     写法:Update 表名 Set 值 where 条件

// 例 using (Conn) { // 注意 我们需要先判断一下 这条数据是否存在 if(!string.IsNullOrEmpty(select("1").name)) return false; SqlCommand update = new SqlCommand("UPDATE Test SET 'pwd'=hello,'info'='world' WHERE name=1", Conn); // 把name==1的数据 pwd设置为hello info字段设置文world update.ExecuteNonQuery(); }

4:DELETE(删除)-----------

写法:Delete from 表名 where 条件

// 例 ---- public static bool DELETE(string name) { // 这里直接写name也可以 而这样写的原因是因为我们的name字段为nchar(10) 不足十位的会在后面补上空格 不信的话你可以打开insert几条数据 然后进入数据库查看 SqlCommand delete = new SqlCommand(string.Format( "DELETE from Test where name='" + SELECT(name).name + "'" ), Conn); delete.ExecuteNonQuery(); return true; }

=============================================C#Linq方式操作=======================================

     unity因为版本的问题,所以并不支持Linq访问,但是不可否认Linq的数据操作是真的方便

(注:Linq可以用来访问字典,列表等很多数据,使用下面的方法)

注意:在看这里的时候,请确保你安装了Linq并且对Lambda(匿名表达式)有一定了解,

Linq的连接数据库方式和ADO.Net不同,他是通过添加组件进行操作,在Windows应用和控制台等可以直接引用VS类库的地方使用非常方便,代码量也比较精简。

----

 

 

-

 

你的命名和我的或许会有所不同,

static DataBaseDataContext db = new DataBaseDataContext(); // 实例化Linq 不需要using释放

当我们需要获取到数据时,就可以直接

public Test Select(string name) { // 使用Linq查找数据 并返回第一条 因为我们name不会重复,所以他其实也就只有一条数据 return (from d in db.Test where d.name == name select d).First(); } ///获取多条数据可以 public List Select() { return (from d in db.Test where d.name != "-1" select d).ToList(); }

而如果我们需要判断是否存在,而不需要获得他的数据时

static bool SelectAny(string name) { return db.Test.Any(a => a.name == name); //也可以是用Where 筛选 return db.Test.Where(a=>a.name == name).Count() == 0; }

删除

public int Delete(string name) { if(!SelectAny(name)) return -1; //数据不存在 db.Test.DeleteOnSubmit(Select(name)); // 这是我们上面写的方法,获得一条数据 db.SubmitChange(); //保存我们进行的修改 return SelectAny(name)?1:0; // 0 标识删除成功 1表示删除失败 }

插入--

static int Insert(string name, string pwd, string info) { if (SelectAny(name)) // 因为我们的主键是name所以需要判断一下 return -1; Test t = new Test // 创建一条数据 但是还没有加入到数据库中 { name = name, pwd = pwd, info = info, }; db.Test.InsertOnSubmit(t); //插入数据 db.SubmitChanges(); //保存修改 if (SelectAny(name)) //如果我们插入成功 return 1; return 0; }

更新

static bool Update() { if(!SelectAny("1")) return false; Test t = Select("1"); // 和删除类似 先找到原有数据 在基础上进行修改,主键无法修改 t.pwd = "30"; t.info = "60"; db.SubmitChanges(); // 保存我们的修改 return true; // 这里可以在加一个判断 以确保数据的正确性 }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有