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