基於ArcGIS10.0和Oracle10g的空間數據管理平臺十二(C#開發)-日誌管理

本篇文章主要介紹本系統中的日誌管理功能,由前面介紹的內容可以知道日誌分爲三類:分別是用戶操作日誌、數據表更新日誌以及數據庫監控日誌,這些日誌的寫入可能遍佈整個系統中的各個地方。這裏提供一個統一的日誌管理界面,可以對日誌進行查詢和刪除,並沒有提供修改的功能,因爲日誌是系統自動生成的,修改日誌沒有任何意義,而且還可能造成系統的漏洞,比如誰刪除了數據然後把刪除的日誌記錄修改了,就不能正確發現誰刪除了數據!

1.定義操作數據集的相關成員變量,對於所有日誌都採用數據集來維護,這就要求每一個表都必須要有一個主鍵,這樣做的目的簡化操作,採用一致性的模型處理所有日誌數據。

[csharp] view plaincopy
  1. private OracleCommandBuilder builder;//數據適配器的命令  
  2. private OracleDataAdapter da;//數據適配器  
  3. private DataSet ds;  
  4. protected OracleConnection Connection;  


2.初始化數據庫連接字符串   

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

3.初始化數據集適配器,並默認並對操作日誌表,修改datagridView的列頭部顯示

[csharp] view plaincopy
  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中,具體的導出過程在前面的工具類中已經介紹過了。

[csharp] view plaincopy
  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.刪除一條日誌記錄的實現

[csharp] view plaincopy
  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.根據選擇字段類型來查詢日誌,可以根據操作時間、日誌類型、用戶名或日誌的具體內容。

[csharp] view plaincopy
  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.刪除所有日誌。

[csharp] view plaincopy
  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!今天介紹完畢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章