当前位置: 首页 > news >正文

编程与数学 03-007 《看潮资源管理器》项目开发 14 操作所有者数据

编程与数学 03-007 《看潮资源管理器》项目开发 14 操作所有者数据

  • 一、需求描述
  • 二、所有者数据导出
  • 三、导入所有者数据
  • 四、清除所有者数据
  • 五、所有者数据统计
    • (一)前端功能代码
    • (二)后台代码
  • 全文总结

摘要:本文介绍《看潮资源管理器》中所有者数据的导出、导入、清除及统计功能。通过C#实现XML导出与验证导入,确保数据一致;调用存储过程汇总磁盘、目录、文件总量,提供完整生命周期管理。

关键词:资源管理器、所有者数据、XML导入导出、C#、存储过程、数据统计

人工智能助手:Kimi


一、需求描述

所有者数据是资源管理的顶级操作对象。为了便于数据交换,需要对所有者数据进行导出、导入、清除、统计等操作。

二、所有者数据导出

private void outputOwner()
{// 导出所有者数据功能if (_dataPath == string.Empty){MessageBox.Show("请在App.config文件中正确配置DataPath!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}// 确认导出DialogResult result = MessageBox.Show($"确定要导出当前所有者的数据吗?\r\n","导出确认", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);if (result == DialogResult.Yes){try{// 创建DataSet并复制数据表DataSet dataSet = new DataSet("OwnerData");dataSet.Tables.Clear();dataSet.Tables.Add(dtDisk.Copy());dataSet.Tables.Add(dtDir.Copy());dataSet.Tables.Add(dtFile.Copy());// 生成文件名并导出XMLstring filename = Path.Combine(_dataPath, $"{cuOwner}_All_DataExport_{DateTime.Now:yyyyMMddHHmmss}.xml");dataSet.WriteXml(filename, XmlWriteMode.WriteSchema);MessageBox.Show($"数据已成功导出到: {filename}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception ex){MessageBox.Show($"导出数据时出错: {ex.Message}", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);}}
}

三、导入所有者数据

private void inputOwner()
{using (OpenFileDialog openFileDialog = new OpenFileDialog()){try{// (一) 打开XML文件if (_dataPath == string.Empty){MessageBox.Show("请在App.config文件中正确配置DataPath!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);}else{openFileDialog.InitialDirectory = _dataPath;    // 设置初始目录}openFileDialog.Filter = "XML 文件 (*.xml)|*.xml|所有文件 (*.*)|*.*";openFileDialog.FilterIndex = 1;openFileDialog.RestoreDirectory = true;if (openFileDialog.ShowDialog() == DialogResult.OK){// (二) 导入到DataSet并验证DataSet dataSet = new DataSet();dataSet.ReadXml(openFileDialog.FileName);if (!ValidateOwnerData(dataSet)){MessageBox.Show("导入的文件不是有效的所有者数据", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}// (三) 更新Owner字段的值foreach (DataTable table in dataSet.Tables){if (table.Columns.Contains("Owner")){foreach (DataRow row in table.Rows){row["Owner"] = cuOwner; // 将Owner字段值更新为当前所有者}}}// (四) 删除每个表中的ID字段foreach (DataTable table in dataSet.Tables){if (table.Columns.Contains("Id")){table.Columns.Remove("Id");}}dataSet.AcceptChanges();// (五) 更新行状态foreach (DataTable table in dataSet.Tables){if (table.Columns.Contains("Owner")){foreach (DataRow row in table.Rows){row.SetAdded(); // 将行状态设置为新增}}}//(六)删除可能已经存在的数据foreach (DataRow row in dataSet.Tables["fm_DriveInfo"].Rows){string vol = row["VolumeLabel"].ToString();_dbHelper.CleardiskData(cuOwner, vol);  // 清除磁盘数据}//(七) 保存到数据库_dbHelper.SetOwnerData(dataSet);string sqltt = "EXEC [rmTotalOwner] @Owner";_dbHelper.ExecuteSql(sqltt, new SqlParameter("@Owner", cuOwner));   // 执行存储过程loadDt(true, true, true, true);MessageBox.Show("数据成功导入并更新到数据库", "提示信息",MessageBoxButtons.OK, MessageBoxIcon.Information);}}catch (Exception ex){MessageBox.Show($"导入过程中出错: {ex.Message}", "错误信息",MessageBoxButtons.OK, MessageBoxIcon.Error);}}
}
// 验证所有者数据的有效性
private bool ValidateOwnerData(DataSet dataSet)
{// 检查是否包含所需的表if (!dataSet.Tables.Contains("fm_DriveInfo") ||!dataSet.Tables.Contains("fm_DirectoryInfo") ||!dataSet.Tables.Contains("fm_FileInfo")){return false;}// 检查表是否包含Owner字段foreach (DataTable table in dataSet.Tables){if (!table.Columns.Contains("Owner"))return false;}return true;
}

四、清除所有者数据

private void clearOwner()
{if (MessageBox.Show("确定要清除" + cuOwner + "的全部数据吗?","操作确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) != DialogResult.OK) return;if (_dbHelper.ClearOwnerData(cuOwner) == true){loadDt(true, true, true, true); // 重新加载数据表MessageBox.Show(cuOwner + "的数据已经被全部清除!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);}
}

五、所有者数据统计

所有者的存储器、文件夹、文件等数据需要进行统计。

(一)前端功能代码

private void updateOwner()
{//更新当前所有者汇总数据if (currentProject != 3) return;// 确认操作DialogResult result = MessageBox.Show($"确定要更新当前所有者的汇总相关数据吗?\r\n" +$"当前所有者:{cuOwner}", "确认计算", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);if (result == DialogResult.Yes){try{// 创建等待对话框FormWait waitForm = new FormWait();waitForm.Text = "更新所有者汇总数据";waitForm.Show();waitForm.textProgress.Text = $"正在计算所有者{cuOwner}的数据,请等候......";waitForm.Refresh();_dbHelper.ExecuteSql("EXEC [rmTotalOwner] @Owner", new SqlParameter("@Owner", cuOwner));waitForm.textProgress.Text = "所有者数据汇总已经完成,正在重新载入数据,请等候......";waitForm.Refresh();loadDt(false, false, false, true);// 关闭等待对话框waitForm.Close();MessageBox.Show("成功完成所有者汇总数据的计算!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception ex){MessageBox.Show($"计算数据时出错: {ex.Message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Error);}}
}

(二)后台代码

USE [RsManagerDb]
GO
/****** Object:  StoredProcedure [dbo].[rmTotalOwner]    Script Date: 2025-09-24 16:28:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ==================================================
-- Author:		岳国军
-- Create date:	2025-06-21
-- Description:	更新所有者文件夹文件合计占用空间大小
-- ==================================================
ALTER PROCEDURE [dbo].[rmTotalOwner](@Owner NVARCHAR(50))
AS
BEGINUPDATE OWSET OW.TotalDisk = DiskStats.DiskCount,OW.TotalDir = DiskStats.TotalDirSum,OW.TotalFiles = DiskStats.TotalFilesSum,OW.TotalSizeGb = DiskStats.TotalSizeGbSumFROM fm_Owner OWINNER JOIN (SELECT Owner,COUNT(*) AS DiskCount,SUM(TotalDir) AS TotalDirSum,SUM(TotalFiles) AS TotalFilesSum,SUM(TotalSizeGb) AS TotalSizeGbSumFROM fm_DriveInfoGROUP BY Owner) DiskStats ON OW.Owner = DiskStats.Owner;END

通过以上功能,就可以完成对所有者数据的操作。

全文总结

文章围绕《看潮资源管理器》对所有者数据的核心维护需求,系统阐述四大功能。导出模块先校验路径,再使用DataSet将磁盘、目录、文件三表合并,按“所有者_时间”命名输出带架构的XML,异常即弹窗提示;导入模块通过OpenFileDialog选文件,先校验是否含指定三表及Owner列,再将Owner列值统一改为当前用户、移除自增ID、置行状态为新增,随后调用CleardiskData按盘符清旧数据,最后批量写入数据库并重新统计。清除功能仅二次确认后即调ClearOwnerData一次性清空该用户所有记录并刷新界面。统计分为前后端:前端弹确认框,弹出等待窗体,后台执行存储过程rmTotalOwner,按Owner聚合fm_DriveInfo得到磁盘数、目录数、文件数及占用空间GB,回写fm_Owner表,再局部刷新界面。整套方案兼顾数据交换、安全与一致性,代码结构清晰,SQL聚合高效,可满足大规模资源管理场景的日常运维与迁移需求。

http://www.dtcms.com/a/515176.html

相关文章:

  • 小九源码-springboot095-java小区闲置物品交易网站
  • Vue组件化开发
  • 自定义服务器实现时间同步
  • 【Python3教程】Python3高级篇之uWSGI 安装配置
  • Nginx 安装配置指南
  • 【新手小白版】Gerrit使用教程
  • Java大模型应用开发框架langchain4j,springai alibaba小结
  • 佛山网络发言人平台湛江网站推广优化
  • 2025最佳跨境电商代理提供商:适配数据采集!
  • C++ STL Deque 高频面试题与答案
  • 墨刀可以做网站原型图吗做游戏推广一个月能拿多少钱
  • 《微信小程序》第三章:Request封装
  • 破空驭风,智领未来 --5KG物流配送无人机展示飞行!
  • 全面掌握 PostgreSQL 关系型数据库,PostgreSQL 和 MySQL 的区别,笔记03
  • 做RAG的开发者如何选择合适的开源项目
  • Spring Boot整合JWT实现跨站点统一登录
  • Spring Boot Docker镜像分层优化指南
  • Linux中页面写回初始化page_writeback_init函数实现
  • 神经网络中的随机高斯初始化技术
  • 怎样做网站分流赚钱东莞网站制作哪家公司好
  • HOOPS 3D可视化引擎:覆盖实时渲染与仿真分析的高性能解决方案!
  • 云原生架构下微服务接入 SkyWalking 最佳实践
  • 单片机中的机器周期、指令周期、总线周期的联系和区别
  • spring微服务宏观概念
  • 在阿里云通过docker部署srs流媒体服务器(支持webrtc、http-flv)
  • 【WAF】 Nginx如何集成安全检测服务
  • nginx安装和使用
  • 茂名市建设银行网站今天哈尔滨最新通告
  • 快飞建站月夜直播免费版
  • Windows 11 25H2 更新补丁导致鼠标键盘失灵,紧急更新补丁已推出