• 基于ArcGIS10.0和Oracle10g的空间数据管理平台十二(C#开发)日志管理


    我的独立博客网址是:http://wuyouqiang.sinaapp.com/

    我的新浪微博:http://weibo.com/freshairbrucewoo

    欢迎大家相互交流,共同提高技术。

        本篇文章主要介绍本系统中的日志管理功能,由前面介绍的内容可以知道日志分为三类:分别是用户操作日志、数据表更新日志以及数据库监控日志,这些日志的写入可能遍布整个系统中的各个地方。这里提供一个统一的日志管理界面,可以对日志进行查询和删除,并没有提供修改的功能,因为日志是系统自动生成的,修改日志没有任何意义,而且还可能造成系统的漏洞,比如谁删除了数据然后把删除的日志记录修改了,就不能正确发现谁删除了数据!

    1.定义操作数据集的相关成员变量,对于所有日志都采用数据集来维护,这就要求每一个表都必须要有一个主键,这样做的目的简化操作,采用一致性的模型处理所有日志数据。

    1         private OracleCommandBuilder builder;//数据适配器的命令
    2 private OracleDataAdapter da;//数据适配器
    3 private DataSet ds;
    4 protected OracleConnection Connection;


    2.初始化数据库连接字符串   

    1         public LogManager()
    2 {
    3 InitializeComponent();
    4 Connection = new OracleConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
    5 }

    3.初始化数据集适配器,并默认并对操作日志表,修改datagridView的列头部显示

     1         /// <summary>
    2 /// 初始化数据集适配器,并默认并对操作日志表,修改datagridView的列头部显示
    3 /// </summary>
    4 /// <param name="sender"></param>
    5 /// <param name="e"></param>
    6 private void LogManager_Load(object sender, EventArgs e)
    7 {
    8 SqlHelper sh = new SqlHelper();
    9 string sql = "select opttime,type,username,description from optlog";
    10 if (Connection.State != ConnectionState.Open)
    11 {
    12 Connection.Open();
    13 }
    14 //构建数据适配器为了修改数据,绑定的数据表必须有主键才能修改
    15 da = new OracleDataAdapter(sql, Connection);
    16 builder = new OracleCommandBuilder(da);
    17 ds = new DataSet();
    18 da.Fill(ds, "jcsjk_optlog");
    19 dataGridViewX1.DataSource = ds.Tables[0];
    20
    21 dataGridViewX1.Columns[0].HeaderText = "时间";
    22 dataGridViewX1.Columns[1].HeaderText = "类型";
    23 dataGridViewX1.Columns[2].HeaderText = "用户名";
    24 dataGridViewX1.Columns[3].HeaderText = "日志内容";
    25 dataGridViewX1.Columns[3].Width = 300;
    26
    27 comboBoxEx1.SelectedIndex = 0;
    28 }

    4.导出数据到word或excel中,具体的导出过程在前面的工具类中已经介绍过了。

     1         /// <summary>
    2 /// 导出数据到word或excel
    3 /// </summary>
    4 /// <param name="sender"></param>
    5 /// <param name="e"></param>
    6 private void expLogBtn_Click(object sender, EventArgs e)
    7 {
    8 FrmSelectExpType fset = new FrmSelectExpType();
    9 fset.ShowDialog();
    10
    11 if (fset.isGon)
    12 {
    13 if (fset.type == 0)
    14 {
    15 CommonTools.ExportDataGridViewToWord(dataGridViewX1);
    16 }
    17 else
    18 {
    19 CommonTools.DataToExcel(dataGridViewX1);
    20 MessageBox.Show("导出数据完成!");
    21 }
    22 }
    23 }


     5.删除一条日志记录的实现

     1         /// <summary>
    2 /// 删除一条日志记录
    3 /// </summary>
    4 /// <param name="sender"></param>
    5 /// <param name="e"></param>
    6 private void delOneBtn_Click(object sender, EventArgs e)
    7 {
    8 if (dataGridViewX1.CurrentRow.Index < 0)
    9 {
    10 MessageBox.Show("请选择需要删除的一行");
    11 return;
    12 }
    13
    14 string strTime = dataGridViewX1.Rows[dataGridViewX1.CurrentRow.Index].Cells[0].Value.ToString();
    15 dataGridViewX1.Rows.Remove(dataGridViewX1.CurrentRow);
    16
    17 if (da.Update(ds, "optlog") > 0)
    18 {
    19 errLabel.Text = "删除一条日志记录成功!";
    20 }
    21 else
    22 {
    23 errLabel.Text = "删除一条日志记录失败!";
    24 }
    25 }

    6.根据选择字段类型来查询日志,可以根据操作时间、日志类型、用户名或日志的具体内容。

     1         /// <summary>
    2 /// 查询相关日志
    3 /// </summary>
    4 /// <param name="sender"></param>
    5 /// <param name="e"></param>
    6 private void queryBtn_Click(object sender, EventArgs e)
    7 {
    8 //dataGridViewX1.Rows.Clear();
    9 string strType = string.Empty;
    10
    11 switch (comboBoxEx1.SelectedIndex)
    12 {
    13 case 0:
    14 strType = "OPTTIME";
    15 break;
    16 case 1:
    17 strType = "TYPE";
    18 break;
    19 case 2:
    20 strType = "USERNAME";
    21 break;
    22 case 3:
    23 strType = "description";
    24 break;
    25 default:
    26 break;
    27 }
    28 string sql = string.Empty;
    29
    30 SqlHelper sh = new SqlHelper();
    31 sql = "select opttime,type,username,description from optlog where " +
    32 strType + " like '%" + queryTxt.Text.Trim() + "%'";
    33 if (Connection.State != ConnectionState.Open)
    34 {
    35 Connection.Open();
    36 }
    37 //构建数据适配器为了修改数据,绑定的数据表必须有主键才能修改
    38 da = new OracleDataAdapter(sql, Connection);
    39 builder = new OracleCommandBuilder(da);
    40 ds = new DataSet();
    41 da.Fill(ds, "jcsjk_optlog");
    42 dataGridViewX1.DataSource = ds.Tables[0];
    43
    44 dataGridViewX1.Columns[0].HeaderText = "时间";
    45 dataGridViewX1.Columns[1].HeaderText = "类型";
    46 dataGridViewX1.Columns[2].HeaderText = "用户名";
    47 dataGridViewX1.Columns[3].HeaderText = "日志内容";
    48 dataGridViewX1.Columns[3].Width = 300;
    49 }

    7.删除所有日志。

     1         private void delAllBtn_Click(object sender, EventArgs e)
    2 {
    3 //dataGridViewX1.Rows.Clear();
    4 int count = dataGridViewX1.Rows.Count;
    5 for (int i = count-1; i >= 0; --i )
    6 {
    7 dataGridViewX1.Rows.RemoveAt(i);
    8 if (da.Update(ds, "optlog") > 0)
    9 {
    10 continue;
    11 }
    12 else
    13 {
    14 errLabel.Text = "删除日志记录失败!";
    15 }
    16 }
    17 errLabel.Text = "删除日志记录成功!";
    18 }

    8.总结

        本篇文章介绍的日志管理功能相对比较简单,没有什么技术难度,不过我觉得还是有几点可以值得思考和学习。第一采用统一的数据管理模型,而不是一张数据表就需要一个单独界面来管理;第二日志查询采用了一种称为全文查询,只要涉及的字段都纳入可查询范围,而且都是通过同一条sql语句实现,通过用户选择的来配置,当然可以增强一些功能就是允许用户选择多个字段;第三就是删除日志也采用了灵活的方式,可以选择一条删除,如果要删除多条(有规律的日志:例如某一天的),可以通过查询然后使用删除所有日志功能(这里是指查询出来在控件中显示的日志)。

        OK!今天介绍完毕!

  • 相关阅读:
    初探JavaScript(一)——也谈元素节点、属性节点、文本节点
    解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
    Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable
    Hadoop阅读笔记(五)——重返Hadoop目录结构
    Hadoop阅读笔记(四)——一幅图看透MapReduce机制
    可视化(番外篇)——在Eclipse RCP中玩转OpenGL
    可视化(番外篇)——SWT总结
    Hadoop阅读笔记(三)——深入MapReduce排序和单表连接
    探秘Tomcat(一)——Myeclipse中导入Tomcat源码
    osgearth将视点绑定到一个节点上
  • 原文地址:https://www.cnblogs.com/brucewoo/p/2281448.html
Copyright © 2020-2023  润新知