最近有一个项目需要从自己的IIS服务器获取数据,显示在android项目中,从网上找了好多关于POST,GET的案例,都是讲解如何获取数据的,但是关于数据源,也就是服务器端如何提供数据介绍的很少,偶尔一篇文章给了我指引,但是具体那片文章忘记了,在这里做个笔记,也好让其他想完整开发项目的同学们有个参考。
Android从服务器不管是GET还是POST数据,都会牵扯到服务器给他提供数据,或者POST后服务器如何存储到数据库。具体不多说,现在开始记录具体步骤:
一、开启Visual Studio ,创建一个项目
创建完项目后,需要用到Newtonsoft.Json.dll,下载地址:Json.NET - Newtonsoft
下载后将其添加到项目的引用中。注意:一定要注意文件的.net版本号,我的是.net 4.0,如果用.net 6.0则会报错。如下图:
至此,项目基本配置完成了,接下来开始操作数据库,读写数据。
首先创建数据库操作类:OpenDataBase.cs
为了方便,把数据库所有操作都写在这一个类里了。
代码如下:
public class OpenDataBase
{
//为了方便,设为全局对象的sql语句
public static String connString = "Data Source=DESKTOP-HH2LRH8;initial catalog=CeShi;User ID =sa;password=sf";
public static List<UserInfo> GetUsers()
{
List<UserInfo> list = new List<UserInfo>();
using (SqlConnection con = new SqlConnection(OpenDataBase.connString))
{
//查询表中有多少条数据
string cmdTxt = "select * from UserInfo";
//创建执行数据库命令的对象
using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
{
//数据库连接最好是最晚打开,最早关闭
con.Open();
SqlDataAdapter sqladapter = new SqlDataAdapter(cmd);
DataTable ds = new DataTable();
sqladapter.Fill(ds);
//遍历DataTable,赋值到UserInfo列表中
foreach (DataRow dr in ds.Rows)
{
UserInfo ui = new UserInfo();
ui.Id = int.Parse(dr[0].ToString());
ui.UserName = dr[1].ToString().Trim();
ui.PassWord = dr[2].ToString().Trim();
list.Add(ui);
}
//执行完命令后立即关闭数据库连接,减少资源消耗
con.Close();
}
}
return list;
}
public static int SaveUser(UserInfo ui)
{
int id = -1; //初始化ID,在调用过程中,只要返回结果不是-1,就证明插入成功了。
using (SqlConnection con = new SqlConnection(OpenDataBase.connString))
{
//向数据库中插入一条新数据,并返回新插入数据的ID号
string cmdTxt = "insert into UserInfo (UserName,PassWord) values ('"+ui.UserName+"','"+ui.PassWord+"')" +
" SELECT IDENT_CURRENT('UserInfo')";
//创建执行数据库命令的对象
using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
{
//数据库连接最好是最晚打开,最早关闭
con.Open();
//执行返回结果集的第一行第一列的值,返回的类型是object,需要类型转换
id = Convert.ToInt32(cmd.ExecuteScalar());
//执行完命令后立即关闭数据库连接,减少资源消耗
con.Close();
//返回ID
}
}
return id;
}
}
SQL Server数据库表结构如下:
接下来就是要写一般处理程序了。
快捷键Ctrl+Shift+A,打开“创建新项目"对话框,选择C#——Web——一般处理程序,名称填写你要通过android 客户端调用的文件名称,此处便于记忆,文件名为GetUserInfo.ashx
然后 点击 添加按钮
GetUserInfo.ashx代码如下:
/// <summary>
/// GetUserInfo 的摘要说明
/// </summary>
public class GetUserInfo : IHttpHandler
{
//初始化UserInfo列表
public static List<UserInfo> users;
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//对UserInfo列表进行赋值
users = OpenDataBase.GetUsers();
//将UserInfo列表转换成Json字符串
string userString = JsonConvert.SerializeObject(users,new DataTableConverter());
context.Response.Write(userString);
}
public bool IsReusable
{
get
{
return false;
}
}
}
同样方法编写一个SaveUserInfo.ashx的一般处理程序,代码如下:
/// <summary>
/// SaveUserInfo 的摘要说明
/// </summary>
public class SaveUserInfo : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//初始化UserInfo对象
UserInfo ui = new UserInfo();
ui.UserName = context.Request["UserName"];
ui.PassWord = context.Request["PassWord"];
//对UserInfo对象进行数据保存并返回值
int id = OpenDataBase.SaveUser(ui);
context.Response.Write(id); //id只要不是-1就证明数据插入成功,而且获得了新数据的ID号
}
public bool IsReusable
{
get
{
return false;
}
}
}
用到的UserInfo对象代码如下:
public class UserInfo
{
public UserInfo() { }
public int Id { get;set; }
public string UserName { get; set; }
public string PassWord { get; set; }
}
至此,保存查询的基本功能就实现了,通过浏览器验证一下功能是否完善
按F5,进行调试,如果弹出以下界面,说明服务器配置不正确,在web.config中添加如下代码:
<system.webServer>
<directoryBrowse enabled="true"/>
</system.webServer>
web.config全部代码如下:
<?xml version="1.0" encoding="utf-8"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.7.2" />
<httpRuntime targetFramework="4.7.2" />
</system.web>
<system.webServer>
<directoryBrowse enabled="true"/>
</system.webServer>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
</configuration>
在浏览器中输入:https://localhost:44337/GetUserInfo.ashx如果得到如下界面,则说明返回数据成功。可以在Android 客户端中对Json数据进行解析。
在浏览器中输入:https://localhost:44337/SaveUserInfo.ashx?UserName=测试用户&PassWord=测试密码
如果出现如下界面,则说明插入数据成功,并返回了新数据的ID号
通过SqlServer数据库中的数据记录可以验证是否正确。