您的位置:首页 > 移动开发 > Unity3D

Unity3d连接SQLServer数据库;以及发布时会遇到的问题

2016-01-22 19:52 666 查看
http://www.3lian.com/edu/2014/02-27/131497.html

在编写代码之前需要:

  1.引入程序集System.Data.dll,位置在C:Program FilesUnityEditorDataMonolibmonounity(我unity默认装在C盘)。

  2.把System.Data.dll文件复制到当前Unity项目文件下,即Assets文件夹下就可以了。

  虽然在unity里面可以运行但是发布为web或者exe后还是连接不上,这就还需要另外三个dll文件I18N.dll,I18N.West.dll,I18N.CJK.dll ,这三个文件和System.data.dll 在同一个目录下,要把这个4个dll文件一起放在Assets文件下最后发布出来也可以连接上数据库了。

  public class ConnectionSqlserver : MonoBehaviour

  {

  void Start()

  {

  //连接字符串

  SqlConnection connstr = new SqlConnection("Data Source=.;Initial Catalog=Exam;uid=sa;pwd=123");

  SqlCommand cmd = new SqlCommand();

  cmd.Connection = connstr;

  cmd.CommandType = System.Data.CommandType.Text;

  //设置sql连接语句

  cmd.CommandText = "select * from Users";

  SqlDataAdapter sda = new SqlDataAdapter(cmd);

  sda.SelectCommand.Connection.Open();

  string strtemp = sda.SelectCommand.ExecuteScalar().ToString();

  sda.SelectCommand.Connection.Close();

  print("连接数据库成功!" + strtemp);

  }

  }


Unity3D研究院之Unity中连接本地或局域网MySQL数据库(五十九)

http://www.xuanyusong.com/archives/2326/

最近MOMO身心疲惫。。今天是周末在家无聊我还是决定来学习。不知道学什么,就学MySQL吧。本篇主要记录从MySQL安装到局域网内任意机器连接数据库,也算是对自己学习的总结。今天我没用Mac电脑,而是选择Windows,没有别有用心,而是想熟悉一下Windows下操作Unity。

官网上下载MySQL的安装程序,这里有一篇详细的安装文章,/article/1242046.html 为了让中文完美的运行,配置MySQL的时候Character Set处设置成UTF-8,好像默认是不能显示中文。配置完毕后就可以在本机中启动MySQL,也可以在cmd命令行中start和stop
启动与关闭MySQL。


1

2

net
start
mysql

net
stop
mysql

为了让本机MySQL数据库可以在局域网中任意机器都可以访问,请看 下面这个网址。

http://dzb3688.blog.163.com/blog/static/105068522201292671444891/



文章有一点点讲的不是很清楚,所以我在补充一下、

我用的是Navicat Pewmium查看数据库,我觉得这个数据库挺好的,因为我在Mac上也是用的这个数据库 。(大家可以在网络上下载它,Windows版本居然有汉化的)如下图所示,点击用户,然后双击”root@%” 最后把主机的名字改成 “%”即可、





下面就是重点了,打开cmd 窗口cd到MySQL的路径下,一定要cd到这个路径下,不然mysql 会是无法识别的指令噢。





然后执行命令:

mysql grant all privileges on *.* to root@”%” identified by ‘abc’ with grant option;

flush privileges;


在执行命令:

mysql flush privileges;

OK这样就行了。

然后开始看看代码怎么写,为了方便数据库的创建、增加、删除、修改、查询、我封装了一个类。欢迎大家测试 啦啦啦啦。

SqlAccess.cs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

using
UnityEngine;

using
System;

using
System.Data;

using
System.Collections;

using
MySql.Data.MySqlClient;

using
MySql.Data;

using
System.IO;

public
class
SqlAccess

{

public
static
MySqlConnection
dbConnection;

//如果只是在本地的话,写localhost就可以。

// static string host = "localhost";

//如果是局域网,那么写上本机的局域网IP

static
string
host
=
"192.168.1.106";

static
string
id
=
"root";

static
string
pwd
=
"1234";

static
string
database
=
"xuanyusong";

public
SqlAccess()

{

OpenSql();

}

public
static
void
OpenSql()

{

try

{

string
connectionString
=
string.Format("Server
= {0};port={4};Database = {1}; User ID = {2}; Password = {3};",host,database,id,pwd,"3306");

dbConnection
=
new
MySqlConnection(connectionString);

dbConnection.Open();

}catch
(Exception
e)

{

throw
new
Exception("服务器连接失败,请重新检查是否打开MySql服务。"
+
e.Message.ToString());

}

}

public
DataSet
CreateTable
(string
name,
string[]
col,
string[]
colType)

{

if
(col.Length
!=
colType.Length)

{

throw
new
Exception
("columns.Length
!= colType.Length");

}

string
query
=
"CREATE TABLE "
+
name
+
" ("
+
col[0]
+
" "
+
colType[0];

for
(int
i
=
1;
i
<
col.Length;
++i)
{

query
+=
", "
+
col[i]
+
" "
+
colType[i];

}

query
+=
")";

return ExecuteQuery(query);

}

public
DataSet
CreateTableAutoID
(string
name,
string[]
col,
string[]
colType)

{

if
(col.Length
!=
colType.Length)

{

throw
new
Exception
("columns.Length
!= colType.Length");

}

string
query
=
"CREATE TABLE "
+
name
+
" ("
+
col[0]
+
" "
+
colType[0]
+ "
NOT NULL AUTO_INCREMENT";

for
(int
i
=
1;
i
<
col.Length;
++i)
{

query
+=
", "
+
col[i]
+
" "
+
colType[i];

}

query
+=
", PRIMARY KEY ("+
col[0]
+")"
+
")";

Debug.Log(query);

return ExecuteQuery(query);

}

//插入一条数据,包括所有,不适用自动累加ID。

public
DataSet
InsertInto
(string
tableName,
string[]
values)

{

string
query
=
"INSERT INTO "
+
tableName
+
" VALUES ("
+
"'"+
values[0]+
"'";

for
(int
i
=
1;
i
<
values.Length;
++i)
{

query
+=
", "
+
"'"+values[i]+
"'";

}

query
+=
")";

Debug.Log(query);

return
ExecuteQuery
(query);

}

//插入部分ID

public
DataSet
InsertInto
(string
tableName,
string[]
col,string[]
values)

{

if
(col.Length
!=
values.Length)

{

throw
new
Exception
("columns.Length
!= colType.Length");

}

string
query
=
"INSERT INTO "
+
tableName
+
" ("
+
col[0];

for
(int
i
=
1;
i
<
col.Length;
++i)

{

query
+=
", "+col[i];

}

query
+=
") VALUES ("
+
"'"+
values[0]+
"'";

for
(int
i
=
1;
i
<
values.Length;
++i)

{

query
+=
", "
+
"'"+values[i]+
"'";

}

query
+=
")";

Debug.Log(query);

return
ExecuteQuery
(query);

}

public
DataSet
SelectWhere
(string
tableName,
string[]
items,
string[]
col,
string[]
operation,
string[]
values)

{

if
(col.Length
!=
operation.Length
||
operation.Length
!=
values.Length)
{

throw
new
Exception
("col.Length
!= operation.Length != values.Length");

}

string
query
=
"SELECT "
+
items[0];

for
(int
i
=
1;
i
<
items.Length;
++i)
{

query
+=
", "
+
items[i];

}

query
+=
" FROM "
+
tableName
+
" WHERE "
+
col[0]
+
operation[0]
+
"'"
+
values[0]
+
"' ";

for
(int
i
=
1;
i
<
col.Length;
++i)
{

query
+=
" AND "
+
col[i]
+
operation[i]
+
"'"
+
values[0]
+
"' ";

}

return
ExecuteQuery
(query);

}

public
DataSet
UpdateInto
(string
tableName,
string
[]cols,string
[]colsvalues,string
selectkey,string
selectvalue)

{

string
query
=
"UPDATE "+tableName+"
SET "+cols[0]+"
= "+colsvalues[0];

for
(int
i
=
1;
i
<
colsvalues.Length;
++i)
{

query
+=
", "
+cols[i]+"
="+
colsvalues[i];

}

query
+=
" WHERE "+selectkey+"
= "+selectvalue+"
";

return
ExecuteQuery
(query);

}

public
DataSet
Delete(string
tableName,string
[]cols,string
[]colsvalues)

{

string
query
=
"DELETE FROM "+tableName
+
" WHERE "
+cols[0]
+"
= "
+
colsvalues[0];

for
(int
i
=
1;
i
<
colsvalues.Length;
++i)

{

query
+=
" or "
+cols[i]+"
= "+
colsvalues[i];

}

Debug.Log(query);

return
ExecuteQuery
(query);

}

public void
Close()

{

if(dbConnection
!=
null)

{

dbConnection.Close();

dbConnection.Dispose();

dbConnection
=
null;

}

}

public
static
DataSet
ExecuteQuery(string
sqlString)

{

if(dbConnection.State==ConnectionState.Open)

{

DataSet
ds
=
new
DataSet();

try

{

MySqlDataAdapter
da
=
new
MySqlDataAdapter(sqlString,
dbConnection);

da.Fill(ds);

}

catch
(Exception
ee)

{

throw
new
Exception("SQL:"
+
sqlString
+
"/n"
+
ee.Message.ToString());

}

finally

{

}

return
ds;

}

return
null;

}

}

然后在来看看调用,把如下脚本绑定在任意对象即可,调用包括、创建表、插入信息、查找信息、删除信息、更新信息。代码比较简单我就不一一注释了,这里我用try catch如果有错误信息将打印在屏幕中。 创建表包括是否递增ID,所以有两种创建表的方式。如果你的数据库是提前预制的话可以这样来读取数据库。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

using
UnityEngine;

using
System;

using
System.Data;

using
System.Collections;

using
MySql.Data.MySqlClient;

using
MySql.Data;

using
System.IO;

public
class
NewBehaviourScript
:
MonoBehaviour
{

string
Error
=
null;

void
Start
()

{

try

{

SqlAccess
sql
=
new SqlAccess();

sql.CreateTableAutoID("momo",new
string[]{"id","name","qq","email","blog"},
new
string[]{"int","text","text","text","text"});

//sql.CreateTable("momo",new
string[]{"name","qq","email","blog"}, new string[]{"text","text","text","text"});

sql.InsertInto("momo",new
string[]{"name","qq","email","blog"},new
string[]{"xuanyusong","289187120","xuanyusong@gmail.com","xuanyusong.com"});

sql.InsertInto("momo",new
string[]{"name","qq","email","blog"},new
string[]{"ruoruo","34546546","ruoruo@gmail.com","xuanyusong.com"});

DataSet
ds =
sql.SelectWhere("momo",new
string[]{"name","qq"},new
string
[]{"id"},new
string
[]{"="},new
string
[]{"1"});

if(ds
!=
null)

{

DataTable
table
=
ds.Tables[0];

foreach
(DataRow
row
in
table.Rows)

{

foreach
(DataColumn
column
in
table.Columns)

{

Debug.Log(row[column]);

}

}

}

sql.UpdateInto("momo",new
string[]{"name","qq"},new
string[]{"'ruoruo'","'11111111'"},
"email",
"'xuanyusong@gmail.com'" );

sql.Delete("momo",new
string[]{"id","email"},
new
string[]{"1","'000@gmail.com'"} );

sql.Close();

}catch(Exception
e)

{

Error
=
e.Message;

}

}

//
Update is called once per frame

void
OnGUI
()

{

if(Error
!=
null)

{

GUILayout.Label(Error);

}

}

}

然后是用到的dll 一个都不能少,不然会出现各种问题。最后的下载地址我会给出,并且包含这些文件。





为了测试局域网的连接, 我还编译到了Android手机上,在Android上访问这个数据库,也是没问题的。当然手机和电脑用的是同一个wifi网络。 目前这个项目在 Windows 和 Android上都可以很好的运行,我感觉在Mac上和iPhone上应该也木有问题,欢迎大家测试,如果发现在别的平台下有问题请告诉我,我会进一步研究的。 欢迎大家留言,一起学习啦啦啦啦 嘿嘿嘿~~。。





下载地址:http://vdisk.weibo.com/s/B5ac9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: