GIS开发进阶之路(二) Webapi、ArcGIS&Oracle、SqlSugar

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大功能:

SqlSugarXXX (2).png

(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();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值