Android通过webservice连接SQLServer详细教程(数据库+服
务器+客户端)
为了避免再次被说标题党,这⾥先说明些事情:
第⼀,android没法直接连接SQLServer,起码我没有发现⽅法,想想看,sqlserver安装之后有多⼤,android程序是跑在⼿机上的,想让程序直接访问sqlserver,那⼿机要多⼤的内存?
第⼆,本⽂是通过⼀个“桥梁”——webservice来间接访问SQLServer的,当然还有其他⽅法,感兴趣的同学可以⾃⾏百度。
如果理解了上⾯两点,好了咱们继续。
教程会拿⼀个具体的例⼦来讲,⼀步⼀步来,也许细节上还可以继续加⼯,但⼤致的流程就是这样的。
本教程有五个部分:
项⽬说明
开发环境部署
数据库设计
服务器端程序设计
客户端(android端)程序设计
项⽬说明
这个项⽬意在实现⼀个简单的android连接Sqlserver的功能。
就做⼀个简单的库存管理功能,包括对仓库内现有货物的查看、货物信息的增加&删除。
开发环境的部署
今天主要讲解第⼀个部分,开发环境的部署.
操作系统:Windows764bit 旗舰版
当然这个是什么基本⽆所谓,只是我是在这上⾯开发的,不过家庭普通版的貌似不能配置IIS,就是咱们后⾯要使⽤的⼀个服务.
android端:eclipse + ADT集成开发环境
相信看到这个教程的基本都知道如何做这些了.如果真的是有哪位同学android开发环境没有配置好⽽来看这篇教程,请先移步-
&le
服务器端:VisualStudio 2010 旗舰版
这个是⽤来写website/webservice的,开发语⾔使⽤C# (即)
数据库:SQLServer2008 R2
其实这个是什么版本也⽆所谓吧,教程使⽤的都是⽐较基本的东西,所以版本的差异基本可以忽略。
IIS 7.5:正确配置并开启IIS服务
如果想将website/webservice发布出去就要开启这个服务。但是如果仅仅是在本地进⾏测试就不需要配置,直接在VS中运⾏就可以。
其实我在开发的时候也只是配置IIS的时候遇到了⼀些问题,这⾥给出IIS的配置⽅法.
数据库名称:StockManage
表设计
表名称:C
表说明:
调用webservice服务列名中⽂名称数据型态必填说明
Cno货物编号Int V主键,⾃增
Cname货物名称String
Cnum货物数量Int
下图是设计表的时候的截图。
向表中输⼊内容
吐槽⼀下:为什么这⾥猫、狗、电话都有,甚⾄还有Surface?!这只能说当时LZ在想这些……
服务器端程序设计(Webservice)
其实服务端可以写成webservice也可以写成website,前者只是提供⼀种服务,⽽后者是可以提供⽤户界⾯等具体的页⾯,后者也就是咱们平时所说的“⽹站”。
两者的区别:
Web Service 只提供程序和接⼝,不提供⽤户界⾯
Web Site 提供程序和接⼝,也提供⽤户界⾯(⽹页)
由于咱们只是需要⼀个中介来访问sqlserver,所以写成webservice⾜够了。
⽬标:写⼀个Website访问Sqlserver,获取数据并转换成xml格式,然后传递给android客户端。
1. 新建⼀个Webservice⼯程
2. 视图 -> 其它窗⼝ -> 服务器资源管理器
3. 右键数据连接 -> 添加连接
4. 选择Microsoft Sqlserver
5. 如下图所⽰选择(可以点击测试连接来检测连接是否成功,然后点击确定)
7. 先查看⼀下数据库属性并记录下连接属性
8. 新建⼀个类DBOperation,代码如下:
1using System;
2using System.Data;
3using System.Configuration;
4using System.Linq;
5using System.Web;
6using System.Web.Security;
7using System.Web.UI;
8using System.Web.UI.HtmlControls;
9using System.Web.UI.WebControls;
10using System.Web.UI.WebControls.WebParts;
11using System.Xml.Linq;
12using System.Data.SqlClient;
13using System.Text.RegularExpressions;
14using System.Collections;
15using System.Collections.Generic;
16
17namespace StockManageWebservice
18{
19 /// <summary>
20 /// ⼀个操作数据库的类,所有对SQLServer的操作都写在这个类中,使⽤的时候实例化⼀个然后直接调⽤就可以
21 /// </summary>
22 public class DBOperation:IDisposable
23 {
24 public static SqlConnection sqlCon; //⽤于连接数据库
25
26 //将下⾯的引号之间的内容换成上⾯记录下的属性中的连接字符串
27 private String ConServerStr = @"Data Source=BOTTLE-PC;Initial Catalog=StockManage;Integrated Security=True";
28
29 //默认构造函数
30 public DBOperation()
31 {
32 if (sqlCon == null)
33 {
34 sqlCon = new SqlConnection();
35 sqlCon.ConnectionString = ConServerStr;
36 sqlCon.Open();
37 }
38 }
39
40 //关闭/销毁函数,相当于Close()
41 public void Dispose()
42 {
43 if (sqlCon != null)
44 {
45 sqlCon.Close();
46 sqlCon = null;
47 }
48 }
49
50 /// <summary>
51 /// 获取所有货物的信息
52 /// </summary>
53 /// <returns>所有货物信息</returns>
54 public List<string> selectAllCargoInfor()
55 {
56 List<string> list = new List<string>();
57
58 try
60 string sql = "select * from C";
61 SqlCommand cmd = new SqlCommand(sql,sqlCon);
62 SqlDataReader reader = cmd.ExecuteReader();
63
64 while (reader.Read())
65 {
66 //将结果集信息添加到返回向量中
67 list.Add(reader[0].ToString());
68 list.Add(reader[1].ToString());
69 list.Add(reader[2].ToString());
70
71 }
72
73 reader.Close();
74 cmd.Dispose();
75
76 }
77 catch(Exception)
78 {
79
80 }
81 return list;
82 }
83
84 /// <summary>
85 /// 增加⼀条货物信息
86 /// </summary>
87 /// <param name="Cname">货物名称</param>
88 /// <param name="Cnum">货物数量</param>
89 public bool insertCargoInfo(string Cname, int Cnum)
90 {
91 try
92 {
93 string sql = "insert into C (Cname,Cnum) values ('" + Cname + "'," + Cnum + ")";
94 SqlCommand cmd = new SqlCommand(sql, sqlCon);
95 cmd.ExecuteNonQuery();
96 cmd.Dispose();
97
98 return true;
99 }
100 catch (Exception)
101 {
102 return false;
103 }
104 }
105
106 /// <summary>
107 /// 删除⼀条货物信息
108 /// </summary>
109 /// <param name="Cno">货物编号</param>
110 public bool deleteCargoInfo(string Cno)
111 {
112 try
113 {
114 string sql = "delete from C where Cno=" + Cno;
115 SqlCommand cmd = new SqlCommand(sql, sqlCon);
116 cmd.ExecuteNonQuery();
117 cmd.Dispose();
118
119 return true;
120 }
121 catch (Exception)
122 {
123 return false;
125 }
126 }
127}
9. 修改Service1.asmx.cs代码如下:
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using System.Web.Services;
6
7namespace StockManageWebservice
8{
9 /// <summary>
10 /// Service1 的摘要说明
11 /// </summary>
12 [WebService(Namespace = "/")]
13 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
14 [System.ComponentModel.ToolboxItem(false)]
15 // 若要允许使⽤ ASP.NET AJAX 从脚本中调⽤此 Web 服务,请取消对下⾏的注释。
16 // [System.Web.Script.Services.ScriptService]
17 public class Service1 : System.Web.Services.WebService
18 {
19 DBOperation dbOperation = new DBOperation();
20
21 [WebMethod]
22 public string HelloWorld()
23 {
24 return "Hello World";
25 }
26
27 [WebMethod(Description = "获取所有货物的信息")]
28 public string[] selectAllCargoInfor()
29 {
30 return dbOperation.selectAllCargoInfor().ToArray();
31 }
32
33 [WebMethod(Description = "增加⼀条货物信息")]
34 public bool insertCargoInfo(string Cname, int Cnum)
35 {
36 return dbOperation.insertCargoInfo(Cname, Cnum);
37 }
38
39 [WebMethod(Description = "删除⼀条货物信息")]
40 public bool deleteCargoInfo(string Cno)
41 {
42 return dbOperation.deleteCargoInfo(Cno);
43 }
44 }
45}
10. 运⾏程序(F5),会⾃动打开⼀个浏览器,可以看到如下画⾯:
11. 选择相应的功能并传递参数可以实现调试从浏览器中调试程序:
下图选择的是增加⼀条货物信息
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论