C# 客户端做对应的数据表操作,怎么记录具体的数据库操作日志?

你懂的11 2018-09-21 10:49:37
问题:比如我做了一个图书管理软件,连接的是mysql数据库。服务器部署好一切就绪,在客户端的图书管理软件界面登录软件,比如登录的是管理员,做了一个新增图书信息的操作,做完之后数据库对应的图书信息表中会增加一条记录。
那么问题来了,(服务器部署好之后--到新增图书信息操作)完成这段时间,怎么去抓取数据库对应的操作表日志(记录增,删,改的操作)。根据时间或者什么的?
领导希望可以把客户端一些对数据表操作的记录,比较详细的统计对应到某个表。

详细问题:服务器部署好之后(各个数据表的状态和内容)--到新增图书信息操作(各个数据表的状态和内容)我想要记录的是,做完操作之后和做之前具体的差异记录下来。
网上说的那些命令行查询mysql的日志方式略过。
先谢谢各位大佬
请大家帮帮忙,怎么实现?
...全文
705 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
token不能为空 2018-10-24
  • 打赏
  • 举报
回复
自己设计一张表
每次操作数据库前向表中加入日志
cyg17173 2018-10-24
  • 打赏
  • 举报
回复
分为几种情况: 1、新增最简单,新增成功后再调用 自己写的日志类方法,不成功则调用错误日志方法; 2、修改前先将数据转换成实体类,通过实体类继承调用日志类方法; 3、删除跟新增一样。 大多数人是采用第二种,转换实体类后怎么处理都方便。
qq_21379937 2018-10-16
  • 打赏
  • 举报
回复
直接用log写到本地不就可以了吗
xuzuning 2018-09-29
  • 打赏
  • 举报
回复
可使用触发器
wanghui0380 2018-09-29
  • 打赏
  • 举报
回复
不需要做,如果你是用的真正的企业级数据库的话,他本身就支持日志功能

所以,你只需要找个数据库日志分析处理工具即可
tanta 2018-09-29
  • 打赏
  • 举报
回复
你需要的数据库操作的审计,可以通过触发器自己来写,也可以通过专门的审计功能来做,MySQL可参考:https://blog.csdn.net/lq18050010830/article/details/78031056
changjian1444 2018-09-29
  • 打赏
  • 举报
回复
实际上方法有很多,主要还是看具体需求要做到什么程度。如果不想更改代码,数据库方面有没有什么特殊的语句,直接用触发器做最简单快捷。
changjian1444 2018-09-29
  • 打赏
  • 举报
回复
调整你的系统,在有数据更改的地方增加一个数据对比及差异信息保存的功能,将更改前的数据和更改后的数据发给这个方法,方法内部判断如果数据有变更就记录下来。
示例的方法:
        /// <summary>
/// 将两个同样的对象对比,针对不同的值进行新旧值的拼接,返回拼接后的字符串
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="oldModel">旧对象</param>
/// <param name="newModel">新对象</param>
/// <param name="appointRecordStrs">指定需要记录的字段集合,主要目的是为了日志查看方便。
/// 设置的字段无论新旧对象的值是否变更,均记录该字段的值。大小写要保持和类的属性一致</param>
/// <param name="existsStrs">需要排除记录的字段,例如创建时间、更新时间等,大小写要保持和类的属性一致</param>
/// <returns>拼接后的字符串</returns>
public string ConvertClassDifferentToString<T>(T oldModel, T newModel, string[] appointRecordStrs = null, string[] existsStrs = null)
{
bool isChange = false;
StringBuilder sb = new StringBuilder();
PropertyInfo[] PropertyList = oldModel.GetType().GetProperties();
foreach (PropertyInfo item in PropertyList)
{
if (existsStrs != null && existsStrs.Count() > 0 && existsStrs.Contains(item.Name))
{
continue;
}
object oldValue = item.GetValue(oldModel, null);
object newValue = item.GetValue(newModel, null);
var deso = Attribute.GetCustomAttribute(item, typeof(DescriptionAttribute));
string des = "";
if (deso != null)
{
des = ((DescriptionAttribute)deso).Description;
}

if (!Equals(oldValue, newValue))
{
isChange = true;
sb.AppendFormat("属性{0}的原值:{1}、现值:{2},", !string.IsNullOrEmpty(des) ? des : item.Name, oldValue == null ? "" : oldValue.ToString(), newValue == null ? "" : newValue.ToString());
}
else if (appointRecordStrs != null && appointRecordStrs.Count() > 0 && appointRecordStrs.Contains(item.Name))
{
sb.AppendFormat("属性{0}的值:{1},", !string.IsNullOrEmpty(des) ? des : item.Name, oldValue == null ? "" : oldValue.ToString());
}
}
if (!isChange)
{
sb.Append("本次编辑未变更任何数据。");
}
return sb.ToString().TrimEnd(',');
}
Vito1993 2018-09-21
  • 打赏
  • 举报
回复
写触发器啊 每当有增删查改操作的时候触发器往你的统计表里写一条记录
  • 打赏
  • 举报
回复
c#记录本次字段变更记录,把更改之前的类跟更改之后的类值做下对比
你懂的11 2018-09-21
  • 打赏
  • 举报
回复
这种方法不行
missing_sprite 2018-09-21
  • 打赏
  • 举报
回复
https://blog.csdn.net/xuheng8600/article/details/79823875 希望对你有帮助

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧