# DataSource 数据集
控制器基类BaseController
已封装了对数据集的访问支持,您可直接在自己的已继承基类的控制器方法中使用以下方法。
默认访问的是鲁泰集团应用层
下的数据集信息。
注意
以下方法均以内置用户访问应用层,所以请勿在数据集中使用{UserGuid}
等WinForm
开发时使用的关键字,可以使用类似{User_Guid}
的自定义关键字。
# GetDataSet
//实例化请求对象
DsRequest qq = new DsRequest();
//设置请求参数,模块标识和数据集名称是必须的
qq.ModuleId = "Web.MES.TestColor.TagActionDefine";
qq.DataSetName = "GetData";
//表名和关键字是可选的,关键字不需要用{}包裹
qq.TableNames = "T01,T02";
qq.Keys["Type"] = "Action";
//执行请求,返回类型为DsResponse类型
var res = GetDataSet(qq);
//判断是否成功,若失败,错误信息在ErrMsg
if (!res.IsSuccess) { return Error(res.ErrMsg); }
DataSet ds = res.DataSet; //结果集DataSet
DataTable dt = res.DataTable; //第一个DataTable,适用于只获取一个表时使用
return Success(dt);
# ExecSql
//实例化请求对象
DsRequest qq = new DsRequest();
//设置请求参数,模块标识和数据集名称是必须的
qq.ModuleId = "Web.MES.TestColor.TagActionDefine";
qq.DataSetName = "Audit";
//ExecSql不支持指定表名,关键字是可选的,关键字不需要用{}包裹
qq.Keys["BillNO"] = "201907240001";
qq.Keys["AuditUser"] = GetCurrUser().UserName; //获取当前用户必须使用此方法
qq.Keys["AuditTime"] = GetDateTime(); //获取应用层服务器时间
//执行请求,返回类型为DsResponse类型
var res = ExecSql(qq);
//判断是否成功,若失败,错误信息在ErrMsg
if (!res.IsSuccess) { return Error(res.ErrMsg); }
return Success("单据审核成功");
# UpdateDataSet
此方法封装了对客户端提交的Json
数据直接保存的能力,所以对Json
数据格式是有要求的。
客户端提交 Json 数据格式
- 要保存的表放于
dataSets
数组中,支持多个表同时保存,但这些表必须位于同一数据库组下。 - 每个要保存的表必须有
datasetName
来标示要保存哪个数据集。 - 每个要保存的表必须有
tableName
来标示要保存哪个数据表。注意,这里不支持用逗号分隔多个表,多表保存需要将每个表单独放于dataSets
数组中。 - 每个要保存的表的数据以数组形式放于
dataTable
中。 dataTable
中的列RowState
为特殊列,不会保存到数据库中。dataTable
中的数据默认会insert
到数据库中,除非表中存在RowState
列,并且值为11
时,此时会执行update
,但需要注意主键列暂时不支持修改
。- 保存哪些列是通过数据集列配置中
是否保存
是否打勾来决定的。
{
"dataSets": [
{
"dataSetName": "GetData",
"tableName": "T01",
"dataTable": [
{
"Guid": "1111",
"Type": "Action",
"Code": "1111",
"Name": "我是第一条记录",
"Note": "8080"
},
{
"Guid": "2222",
"Type": "Action",
"Code": "2222",
"Name": "我是第二条记录",
"Note": "9090"
},
{
"Guid": "3333",
"Type": "Action",
"Code": "3333",
"Name": "我是第三条记录",
"Note": "此行记录RowState=11,会被翻译成update执行",
"RowState": "11"
}
]
},
{
"datasetName": "GetMachine",
"tableName": "T01",
"dataTable": [
{
"MachineNO": "bb1cf912-e411-4ea6-821f-432baa2744f2",
"InWaterSpeed": "11",
"LocationNO": "1",
"Note":"这是第二个表的数据"
}
]
}
]
}
服务端保存方法
[HttpPost]
public ResponseMessage SaveData(dynamic p)
{
//需要定义模块标识
string moduleId = "Web.MES.TestColor.TagActionDefine";
//执行保存,返回类型为DsResponse类型
//因为这里参数是dynamic类型,返回值若用var接收时也会被当作dynamic,所以这里明确使用类型DsResponse接收
DsResponse res = UpdateDataSet(moduleId, p);
//判断是否成功,若失败,错误信息在ErrMsg
if (!res.IsSuccess) { return Error(res.ErrMsg); }
return Success("保存成功");
}
# GetPageData
获取分页数据,需要注意配置的
SQL
语句必须有order by
排序子句。分页查询只支持单表获取,所以表名不允许以
逗号
分隔多个表。页码是从
1
开始,有些前端分页组件页码是从0
开始的,需要自己单独处理,比如取数前手动修改页码+1
,取数后手动修改页码-1
。分页查询需要在
Web.config
中配置数据库组别名
对应的数据库链接信息,如数据库组别名
为EOM
,则必须配置在Web.config
中配置以下内容,注意数据库组别名
前需要添加conn
前缀。
<configuration>
<connectionStrings>
<add name="connEOM" connectionString="server=10.200.0.91;uid=xxx;pwd=xxx;database=EOM" />
</connectionStrings>
</configuration>
//实例化请求对象
DsRequest qq = new DsRequest();
//设置请求参数,模块标识和数据集名称是必须的
qq.ModuleId = "Web.MES.TestColor.TagActionDefine";
qq.DataSetName = "GetData";
//获取分页暂时只支持单表获取,不支持逗号分隔多个表
qq.TableNames = "T01";
qq.Keys["Type"] = "Action";
//执行请求,参数中指定页码和每页记录数,这里取第2页,每页10条记录
var res = GetPageData(qq, 2, 10);
//判断是否成功,若失败,错误信息在ErrMsg
if (!res.IsSuccess) { return Error(res.ErrMsg); }
//分页数据保存在Response.PageData中
return Success(res.PageData);