解决: C# 多个dataTable添加到 dataSet中
项目中用到 查询多个结果集
这里调用多个sql语句 返回多个dataTable 然后包装成一个dataSet ,然后返回
先定义 多个dataTable 和一个返回dataSet
DataSet ds = new DataSet(); DataTable dt0 = new DataTable(); DataTable dt1 = new DataTable(); DataTable dt2 = new DataTable(); DataTable dt3 = new DataTable();
然后给每个dataTable 起个名字
dt1.TableName = "Table0"; dt2.TableName = "Table1"; dt3.TableName = "Table2";
最后调用dataTable.Copy方法
ds.Tables.Add(dt1.Copy()); ds.Tables.Add(dt2.Copy()); ds.Tables.Add(dt3.Copy());
最后返回dataSet
完整代码
/// <summary> /// Hwq 2022年4月18日17:11:40 /// 查询 围栏统计细节 /// </summary> /// <param name="fSqlConnectString">IOT数据库链接</param> /// <param name="sqlConnectString">AnalysisData数据库链接</param> /// <param name="fAgentGUID">部门fguid</param> /// <param name="fStartTime">开始时间</param> /// <param name="fEndTime">结束时间</param> /// <param name="fSelectType">类型:1:按日查询 2:按月查询 3:按年查询</param> /// <returns></returns> public object SQueryFenceStatisticsDetails(string fSqlConnectString, string sqlConnectString, Guid fAgentGUID, DateTime fStartTime, DateTime fEndTime, int fSelectType) { DReport dReport = new DReport(); DataSet ds = new DataSet(); DataTable dt0 = new DataTable(); DataTable dt1 = new DataTable(); DataTable dt2 = new DataTable(); DataTable dt3 = new DataTable(); // 按日查询 直接传值 // 按月查询 开始时间 月初 // 结束时间 月末 if (fSelectType == 1) { // 按月 // 重新定义时间逻辑... fStartTime = fStartTime.AddDays(1 - fStartTime.Day); ///本月初 fEndTime = fEndTime.AddDays(1 - fEndTime.Day).AddMonths(1).AddDays(-1); ///本月底 } // 1.先根据 部门fguid 查询 所有部门车辆 fguid ,拼接字符串 用逗号间隔 string fVehicleGUIDs = ""; dt0 = dReport.DQueryFVehicleGUIDsByFAgentGUID(fSqlConnectString, fAgentGUID); if (dt0 != null && dt0.Rows.Count > 0) { foreach (DataRow dr in dt0.Rows) { if (string.IsNullOrEmpty(fVehicleGUIDs)) { fVehicleGUIDs = dr["FVehicleGUID"].ToString(); } else { fVehicleGUIDs = "," dr["FVehicleGUID"].ToString(); } } } else { // 部门下没有车辆,返回空 return ds; } // 2.在 根据车俩fguid 查询 满洲里/阿拉山口/二连浩特/霍尔果斯 四个出境关口 次数统计(第一饼状图) // 3.再 根据车辆fguid 查询 统计所有车辆起始站次数 和 占比 (第二个饼状图) // 4.在 根据车辆fguid 查询 每个围栏的停留时间 if (dReport.DQueryCountFenceStatusticByFVehicleGUIDs(sqlConnectString, fStartTime, fEndTime, General.Instance.GetStrArray2StrIn(fVehicleGUIDs)) != null) { dt1 = dReport.DQueryCountFenceStatusticByFVehicleGUIDs(sqlConnectString, fStartTime, fEndTime, General.Instance.GetStrArray2StrIn(fVehicleGUIDs)); } if (dReport.DQueryFStartCityPointByFVehicleGUIDs(sqlConnectString, fStartTime, fEndTime, General.Instance.GetStrArray2StrIn(fVehicleGUIDs)) != null) { dt2 = dReport.DQueryFStartCityPointByFVehicleGUIDs(sqlConnectString, fStartTime, fEndTime, General.Instance.GetStrArray2StrIn(fVehicleGUIDs)); } if (dReport.DQueryFenceFStopDurationByFVehicleGUIDs(sqlConnectString, fStartTime, fEndTime, General.Instance.GetStrArray2StrIn(fVehicleGUIDs)) != null) { dt3 = dReport.DQueryFenceFStopDurationByFVehicleGUIDs(sqlConnectString, fStartTime, fEndTime, General.Instance.GetStrArray2StrIn(fVehicleGUIDs)); } // 5.合并dataTable , 返回 dataSet dt1.TableName = "Table0"; dt2.TableName = "Table1";
dt3.TableName = "Table2";
ds.Tables.Add(dt1.Copy());
ds.Tables.Add(dt2.Copy());
ds.Tables.Add(dt3.Copy());
return ds;
}