程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#讀取並分析sql Server2005數據庫日志

c#讀取並分析sql Server2005數據庫日志

編輯:C#入門知識

用過logExplorer的朋友都會被他強悍的功能吸引,我寫過一篇詳細的操作文檔可以參考
http://blog.csdn.net/jinjazz/archive/2008/05/19/2459692.aspx

我們可以自己用開發工具來實現sql日志的讀取,這個應用還是很酷的,具體思路

1、首先要了解一個沒有公開的系統函數::fn_dblog,他可以讀取sql日志,並返回二進制的行數據
2、然後要了解sql的二進制數據是如何存儲的,這個可以參考我的blog文章
http://blog.csdn.net/jinjazz/archive/2008/08/07/2783872.aspx
3、用自己擅長的開發工具來分析數據,得到我們需要的信息

我用c#寫了一個測試樣例,分析了int,char,datetime和varchar的日志情況而且沒有考慮null和空字符串的保存,希望感興趣的朋友能和我一起交流打造屬於自己的日志分析工具

詳細的試驗步驟以及代碼如下:

1、首先建立sqlserver的測試環境,我用的sql2005,這個過程不能保證在之前的版本中運行
以下sql語句會建立一個dbLogTest數據庫,並建立一張log_test表,然後插入3條數據之後把表清空
 

  1. use master
  2. go
  3. create database dbLogTest
  4. go
  5. use  dbLogTest
  6. go
  7. create table log_test(id int ,code char(10),name varchar(20),date datetime,memo varchar(100))
  8. insert into log_test select 100, id001,jinjazz,getdate(),剪刀
  9. insert into log_test select 65549,id002,游客,getdate()-1,這家伙很懶,沒有設置昵稱
  10. insert into log_test select -999,id003,這家伙來自火星,getdate()-1000,a
  11.  
  12. delete from log_test
  13.  
  14. --use master 
  15. --go
  16. --drop database dbLogTest
  17.  


2、我們最終的目的是要找到被我們刪掉的數據

3、分析日志的c#代碼:我已經盡量詳細的寫了注釋
 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace ConsoleApplication21
  6. {
  7.     class Program
  8.     {
  9.         /// <summary>
  10.         /// 分析sql2005日志,找回被delete的數據,引用請保留以下信息
  11.         /// 作者:jinjazz (csdn的剪刀)
  12.         /// 作者blog:http://blog.csdn.net/jinjazz
  13.         /// </summary>
  14.         /// <param name="args"></param>
  15.         static void Main(string[] args)
  16.         {
  17.             using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection())
  18.             {
  19.                 conn.ConnectionString = "server=localhost;uid=sa;pwd=sqlgis;database=dbLogTest";
  20.                 conn.Open();
  21.                 using (System.Data.SqlClient.SqlCommand command = conn.CreateCommand())
  22.                 {
  23.                     //察看dbo.log_test對象的sql日志
  24.                     command.CommandText = @"SELECT allocunitname,operation,[RowLog Contents 0] as r0,[RowLog Contents 1]as r1 
  25.                                 from::fn_dblog (null
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved