WebApi进阶:
参数传递:在WebApi的RESETful风格里面,API服务的增删改查,分别对应着http的post/delete/put/get请求。
(1)GET请求:
get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中)
{
type: "get",
url: "http://localhost:27221/api/Charging/FindByModel",
contentType: "application/json",
data: { strQuery: JSON.stringify({ ID: "1", NAME: "Jim", CREATETIME: "1988-09-11" }) },
success: function (data, status) {
if (status == "success") {
$("#div_test").html(data);
}
}
}
方法名以Get开头,WebApi会自动默认这个请求就是get请求,而如果以其他名称开头而又不标注方法的请求方式,那么这个时候服务器虽然找到了这个方法,但是由于请求方式不确定,所以直接返回405——方法不被允许的错误。
所有的WebApi方法最好是加上请求的方式([HttpGet]/[HttpPost]/[HttpPut]/[HttpDelete])。
(2)POST请求:
post请求的数据会放在http协议包的包体中
{
type: "post",
url: "http://localhost:27221/api/Charging/SaveData",
contentType: 'application/json',
data: JSON.stringify(arr),
success: function (data, status) {}
}
post请求默认是将表单里面的数据的key/value形式发送到服务,而服务器只需要有对应的key/value属性值的对象就可以接收到。而如果使用application/json,则表示将前端的数据以序列化过的json传递到后端,后端要把它变成实体对象,还需要一个反序列化的过程。
(3)PUT请求:
WebApi里面put请求一般用于对象的更新。它和用法和post请求基本相同。同样支持[FromBody],同样可以使用dynamic。
{
type: "put",
url: "http://localhost:27221/api/Charging/Update",
contentType: 'application/json',
data: JSON.stringify({ ID: "1" }),
success: function (data, status) {}
}
(4)DELETE请求:
delete请求是用于删除操作的。参数传递机制和post也基本相同。
{
type: "delete",
url: "http://localhost:27221/api/Charging/OptDelete",
contentType: 'application/json',
data: JSON.stringify(arr),
success: function (data, status) {}
}
ArcGIS直连Oracle数据库部署:
为了连接上oracle数据库,需要在安装了arcgis server的机器上安装oracle 64位的客户端;同时要在安装了arcgis desktop的机器上安装oracle 32位的客户端。如果arcgis server和arcgis desktop安装在同一台机器上,需要同时安装oracle 32位、64位客户端。
数据库版本要求:
安装Oracle11G R2后,打开ArcGIS Catalog,如图。
Oracle数据库表操作:
(1)创建表空间和表
创建一个dist_test数据表,然后将其放置在自定义的tbs_test表空间里。
创建表空间:
SQL>create tablespace tbs_test datafile 'D:\OracleFiles\OracleData\datafile_test. dbf'
size 100m
extent management local autoallocate
segment space management auto;
创建表:
SQL>create table dist_test(
dino number(10) not null, --工号
diname varchar2(8), --姓名
dicall char(2), --联系方式
diage int
)tablespace tbs_test;
(2)SQL Plus部分命令
使用SAVE命令将缓冲区内容保存到文件
SAV[E] [ FILE ] file_name [ CRE[ATE] | REP[LACE] | APP[END] ]
使用GET命令读取文件内容到缓冲区
GET [ FILE ] file_name [ LIST | NOLIST ]
使用COLUMN命令格式化列的显示效果
COL[UMN] [ { column_name | ALI[AS] alias } [ options ] ]
使用LINESIZE命令设置一行显示的字符数量
SET LINESIZE n
使用PAGESIZE命令设置一页显示多少行数据
SET PAGESIZE n
ORM-SqlSugar:
(1)使用Nuget安装:SqlSugar是.NET版本,SqlSugarCore是.NET CORE版本,根据项目需要选择引用dll
(2)SqlSugar16大功能:
(3)创建数据库连接对象:
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = Config.ConnectionString,//必填, 数据库连接字符串
DbType = DbType.SqlServer, //必填, 数据库类型
IsAutoCloseConnection = true, //默认false, 时候知道关闭数据库连接, 设置为true无需使用using或者Close操作
InitKeyType = InitKeyType.SystemTable //默认SystemTable, 字段信息读取, 如:该属性是不是主键,是不是标识列等等信息
});
List<Student> list=db.Queryable<Student>().ToList();``//查询所有(使用SqlSugarClient查询所有到LIST)
(4)C-插入:
var insertObjs = new List<Student>();
var s9 = db.Insertable(insertObjs.ToArray()).ExecuteCommand();
//注意 : SqlSever 建表语句带有Wtih(设置),如果设置不合理,可能会引起慢,把With删掉就会很快
(5)R-简单查询:
//实体定义
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
}
var getAll = db.Queryable<Student>().ToList();
/*
生成SQL: SELECT [ID],[Name] FROM [Student]
*/
(6)R-多表查询:
//两表查询
var list = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.SchoolId==sc.Id})
.Select((st,sc)=>new{Id=st.Id,Name=st.Name,SchoolName=sc.Name}).ToList();
//三表查询
var list = db.Queryable<Student, School, Student>((st, sc, st2) =>new object[] {
JoinType.Left,st.SchoolId==sc.Id,
JoinType.Left,st.SchoolId==st2.Id
})
.Where((st, sc, st2) => st2.Id == 1 || sc.Id == 1 || st.Id == 1)
.OrderBy((sc) => sc.Id)
.OrderBy((st,sc)=> st.Name,OrderByType.Desc)
.Select((st,sc,st2)=>new { st=st,sc=sc}).ToList();
//多表查询分页
var list3 = db.Queryable<Student, School>((st, sc) =>new object[] {
JoinType.Left,st.SchoolId==sc.Id
}).Select((st, sc) => new ViewModelStudent { Name = st.Name, SchoolId = sc.Id })
.ToPageList(pageIndex,pageSize)
(7)R-查询函数:
db.Queryable<Student>().Where(it => SqlFunc.ToLower(it.Name) == SqlFunc.ToLower("JACK")).ToList();
(8)R-动态查询:
//动态查询
var queryable=db.Queryable<Student>();
//拼接会比EF方便些,不像EF需要queryable+=
queryable.Where(it => it.Id==1);
queryable.Where(it => it.Name=="a");
//防止queryable相互影响我们用clone解决
var id=queryable.Clone().Select(it=>it.Id).First();
var list=queryable.Clone().ToList();
(9)U-更新:
//传实体对象写法(支持批量对象)
db.Updateable(updateObj)
//不传实体对象写法
db.Updateable<T>()
(10)D-删除:
var t1 = db.Deleteable<Student>(1).ExecuteCommand();
var t1 = db.Deleteable<Student>(it=>it.id==1).ExecuteCommand();
var t1 = db.Deleteable<Student>(new int[]{1,2,3}).ExecuteCommand();
var t1 = db.Deleteable<Student>(实体).ExecuteCommand();