基于ArcGIS10.0和Oracle10g的空间数据管理平台十二(C#开发)-日志管理
2013-04-08 14:03
831 查看
本篇文章主要介绍本系统中的日志管理功能,由前面介绍的内容可以知道日志分为三类:分别是用户操作日志、数据表更新日志以及数据库监控日志,这些日志的写入可能遍布整个系统中的各个地方。这里提供一个统一的日志管理界面,可以对日志进行查询和删除,并没有提供修改的功能,因为日志是系统自动生成的,修改日志没有任何意义,而且还可能造成系统的漏洞,比如谁删除了数据然后把删除的日志记录修改了,就不能正确发现谁删除了数据!
1.定义操作数据集的相关成员变量,对于所有日志都采用数据集来维护,这就要求每一个表都必须要有一个主键,这样做的目的简化操作,采用一致性的模型处理所有日志数据。
[csharp] view
plaincopy
private OracleCommandBuilder builder;//数据适配器的命令
private OracleDataAdapter da;//数据适配器
private DataSet ds;
protected OracleConnection Connection;
2.初始化数据库连接字符串
[csharp] view
plaincopy
public LogManager()
{
InitializeComponent();
Connection = new OracleConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
}
3.初始化数据集适配器,并默认并对操作日志表,修改datagridView的列头部显示
[csharp] view
plaincopy
/// <summary>
/// 初始化数据集适配器,并默认并对操作日志表,修改datagridView的列头部显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LogManager_Load(object sender, EventArgs e)
{
SqlHelper sh = new SqlHelper();
string sql = "select opttime,type,username,description from optlog";
if (Connection.State != ConnectionState.Open)
{
Connection.Open();
}
//构建数据适配器为了修改数据,绑定的数据表必须有主键才能修改
da = new OracleDataAdapter(sql, Connection);
builder = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds, "jcsjk_optlog");
dataGridViewX1.DataSource = ds.Tables[0];
dataGridViewX1.Columns[0].HeaderText = "时间";
dataGridViewX1.Columns[1].HeaderText = "类型";
dataGridViewX1.Columns[2].HeaderText = "用户名";
dataGridViewX1.Columns[3].HeaderText = "日志内容";
dataGridViewX1.Columns[3].Width = 300;
comboBoxEx1.SelectedIndex = 0;
}
4.导出数据到word或excel中,具体的导出过程在前面的工具类中已经介绍过了。
[csharp] view
plaincopy
/// <summary>
/// 导出数据到word或excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void expLogBtn_Click(object sender, EventArgs e)
{
FrmSelectExpType fset = new FrmSelectExpType();
fset.ShowDialog();
if (fset.isGon)
{
if (fset.type == 0)
{
CommonTools.ExportDataGridViewToWord(dataGridViewX1);
}
else
{
CommonTools.DataToExcel(dataGridViewX1);
MessageBox.Show("导出数据完成!");
}
}
}
5.删除一条日志记录的实现
[csharp] view
plaincopy
/// <summary>
/// 删除一条日志记录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void delOneBtn_Click(object sender, EventArgs e)
{
if (dataGridViewX1.CurrentRow.Index < 0)
{
MessageBox.Show("请选择需要删除的一行");
return;
}
string strTime = dataGridViewX1.Rows[dataGridViewX1.CurrentRow.Index].Cells[0].Value.ToString();
dataGridViewX1.Rows.Remove(dataGridViewX1.CurrentRow);
if (da.Update(ds, "optlog") > 0)
{
errLabel.Text = "删除一条日志记录成功!";
}
else
{
errLabel.Text = "删除一条日志记录失败!";
}
}
6.根据选择字段类型来查询日志,可以根据操作时间、日志类型、用户名或日志的具体内容。
[csharp] view
plaincopy
/// <summary>
/// 查询相关日志
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void queryBtn_Click(object sender, EventArgs e)
{
//dataGridViewX1.Rows.Clear();
string strType = string.Empty;
switch (comboBoxEx1.SelectedIndex)
{
case 0:
strType = "OPTTIME";
break;
case 1:
strType = "TYPE";
break;
case 2:
strType = "USERNAME";
break;
case 3:
strType = "description";
break;
default:
break;
}
string sql = string.Empty;
SqlHelper sh = new SqlHelper();
sql = "select opttime,type,username,description from optlog where " +
strType + " like '%" + queryTxt.Text.Trim() + "%'";
if (Connection.State != ConnectionState.Open)
{
Connection.Open();
}
//构建数据适配器为了修改数据,绑定的数据表必须有主键才能修改
da = new OracleDataAdapter(sql, Connection);
builder = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds, "jcsjk_optlog");
dataGridViewX1.DataSource = ds.Tables[0];
dataGridViewX1.Columns[0].HeaderText = "时间";
dataGridViewX1.Columns[1].HeaderText = "类型";
dataGridViewX1.Columns[2].HeaderText = "用户名";
dataGridViewX1.Columns[3].HeaderText = "日志内容";
dataGridViewX1.Columns[3].Width = 300;
}
7.删除所有日志。
[csharp] view
plaincopy
private void delAllBtn_Click(object sender, EventArgs e)
{
//dataGridViewX1.Rows.Clear();
int count = dataGridViewX1.Rows.Count;
for (int i = count-1; i >= 0; --i )
{
dataGridViewX1.Rows.RemoveAt(i);
if (da.Update(ds, "optlog") > 0)
{
continue;
}
else
{
errLabel.Text = "删除日志记录失败!";
}
}
errLabel.Text = "删除日志记录成功!";
}
8.总结
本篇文章介绍的日志管理功能相对比较简单,没有什么技术难度,不过我觉得还是有几点可以值得思考和学习。第一采用统一的数据管理模型,而不是一张数据表就需要一个单独界面来管理;第二日志查询采用了一种称为全文查询,只要涉及的字段都纳入可查询范围,而且都是通过同一条sql语句实现,通过用户选择的来配置,当然可以增强一些功能就是允许用户选择多个字段;第三就是删除日志也采用了灵活的方式,可以选择一条删除,如果要删除多条(有规律的日志:例如某一天的),可以通过查询然后使用删除所有日志功能(这里是指查询出来在控件中显示的日志)。
OK!今天介绍完毕!
1.定义操作数据集的相关成员变量,对于所有日志都采用数据集来维护,这就要求每一个表都必须要有一个主键,这样做的目的简化操作,采用一致性的模型处理所有日志数据。
[csharp] view
plaincopy
private OracleCommandBuilder builder;//数据适配器的命令
private OracleDataAdapter da;//数据适配器
private DataSet ds;
protected OracleConnection Connection;
2.初始化数据库连接字符串
[csharp] view
plaincopy
public LogManager()
{
InitializeComponent();
Connection = new OracleConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
}
3.初始化数据集适配器,并默认并对操作日志表,修改datagridView的列头部显示
[csharp] view
plaincopy
/// <summary>
/// 初始化数据集适配器,并默认并对操作日志表,修改datagridView的列头部显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LogManager_Load(object sender, EventArgs e)
{
SqlHelper sh = new SqlHelper();
string sql = "select opttime,type,username,description from optlog";
if (Connection.State != ConnectionState.Open)
{
Connection.Open();
}
//构建数据适配器为了修改数据,绑定的数据表必须有主键才能修改
da = new OracleDataAdapter(sql, Connection);
builder = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds, "jcsjk_optlog");
dataGridViewX1.DataSource = ds.Tables[0];
dataGridViewX1.Columns[0].HeaderText = "时间";
dataGridViewX1.Columns[1].HeaderText = "类型";
dataGridViewX1.Columns[2].HeaderText = "用户名";
dataGridViewX1.Columns[3].HeaderText = "日志内容";
dataGridViewX1.Columns[3].Width = 300;
comboBoxEx1.SelectedIndex = 0;
}
4.导出数据到word或excel中,具体的导出过程在前面的工具类中已经介绍过了。
[csharp] view
plaincopy
/// <summary>
/// 导出数据到word或excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void expLogBtn_Click(object sender, EventArgs e)
{
FrmSelectExpType fset = new FrmSelectExpType();
fset.ShowDialog();
if (fset.isGon)
{
if (fset.type == 0)
{
CommonTools.ExportDataGridViewToWord(dataGridViewX1);
}
else
{
CommonTools.DataToExcel(dataGridViewX1);
MessageBox.Show("导出数据完成!");
}
}
}
5.删除一条日志记录的实现
[csharp] view
plaincopy
/// <summary>
/// 删除一条日志记录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void delOneBtn_Click(object sender, EventArgs e)
{
if (dataGridViewX1.CurrentRow.Index < 0)
{
MessageBox.Show("请选择需要删除的一行");
return;
}
string strTime = dataGridViewX1.Rows[dataGridViewX1.CurrentRow.Index].Cells[0].Value.ToString();
dataGridViewX1.Rows.Remove(dataGridViewX1.CurrentRow);
if (da.Update(ds, "optlog") > 0)
{
errLabel.Text = "删除一条日志记录成功!";
}
else
{
errLabel.Text = "删除一条日志记录失败!";
}
}
6.根据选择字段类型来查询日志,可以根据操作时间、日志类型、用户名或日志的具体内容。
[csharp] view
plaincopy
/// <summary>
/// 查询相关日志
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void queryBtn_Click(object sender, EventArgs e)
{
//dataGridViewX1.Rows.Clear();
string strType = string.Empty;
switch (comboBoxEx1.SelectedIndex)
{
case 0:
strType = "OPTTIME";
break;
case 1:
strType = "TYPE";
break;
case 2:
strType = "USERNAME";
break;
case 3:
strType = "description";
break;
default:
break;
}
string sql = string.Empty;
SqlHelper sh = new SqlHelper();
sql = "select opttime,type,username,description from optlog where " +
strType + " like '%" + queryTxt.Text.Trim() + "%'";
if (Connection.State != ConnectionState.Open)
{
Connection.Open();
}
//构建数据适配器为了修改数据,绑定的数据表必须有主键才能修改
da = new OracleDataAdapter(sql, Connection);
builder = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds, "jcsjk_optlog");
dataGridViewX1.DataSource = ds.Tables[0];
dataGridViewX1.Columns[0].HeaderText = "时间";
dataGridViewX1.Columns[1].HeaderText = "类型";
dataGridViewX1.Columns[2].HeaderText = "用户名";
dataGridViewX1.Columns[3].HeaderText = "日志内容";
dataGridViewX1.Columns[3].Width = 300;
}
7.删除所有日志。
[csharp] view
plaincopy
private void delAllBtn_Click(object sender, EventArgs e)
{
//dataGridViewX1.Rows.Clear();
int count = dataGridViewX1.Rows.Count;
for (int i = count-1; i >= 0; --i )
{
dataGridViewX1.Rows.RemoveAt(i);
if (da.Update(ds, "optlog") > 0)
{
continue;
}
else
{
errLabel.Text = "删除日志记录失败!";
}
}
errLabel.Text = "删除日志记录成功!";
}
8.总结
本篇文章介绍的日志管理功能相对比较简单,没有什么技术难度,不过我觉得还是有几点可以值得思考和学习。第一采用统一的数据管理模型,而不是一张数据表就需要一个单独界面来管理;第二日志查询采用了一种称为全文查询,只要涉及的字段都纳入可查询范围,而且都是通过同一条sql语句实现,通过用户选择的来配置,当然可以增强一些功能就是允许用户选择多个字段;第三就是删除日志也采用了灵活的方式,可以选择一条删除,如果要删除多条(有规律的日志:例如某一天的),可以通过查询然后使用删除所有日志功能(这里是指查询出来在控件中显示的日志)。
OK!今天介绍完毕!
相关文章推荐
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十二(C#开发)-日志管理
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十二(C#开发)-日志管理
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十二(C#开发)-元数据库库管理
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台七(C#开发)-日志操作类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台七(C#开发)-日志操作类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台七(C#开发)-日志操作类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台三(C#开发)-多皮肤主界面功能
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-AE常用操作代码
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台三(C#开发)-多皮肤主界面功能
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-系统需求分析
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-背景介绍
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十四(C#开发)-元数据库库管理
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台一(C#开发)
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台四(C#开发)-通用数据管理模块
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十(C#开发)-空间数据导入RDBMS上-MDB格式
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-(GIS)地理信息系统简介
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十四(C#开发)-元数据库库管理
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台一(C#开发)-系统功能介绍及展示
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台五(C#开发)-通用工具类
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十一(C#开发)-空间数据字段检查