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
表设计
如何生成webservice客户端表名称:C
表说明:
列名中⽂名称数据型态必填说明
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小时内删除。