注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐小屋

 
 
 

日志

 
 

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

2013-06-14 15:21:29|  分类: Oracle |  标签: |举报 |字号 订阅

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

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!今天介绍完毕!
  评论这张
 
阅读(257)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018