第一次发表文章,可能略显不成熟,呵呵。希望得到推荐
主体思想:定制自己的操作日志。(多用户的业务平台)
既然提到操作日志,根据实际情况不光光记录一些普通的记录,还得记录一些,比如:用户,用户ID,操作类型,操作保存的值,客户端IP,客户端计算机名,一些自己需要的字段,操作时间等等。
其实网上很多关于日志的文章,但是基本上都是公用的,想打造自己的还是自己写的好~
不要把这个操作日志想的很神秘,其实就是收集各种数据,然后INSERT即可。
记录怎么收集?
下面就详细讲解一下,仅仅说的是操作记录,并不是错误记录
public void dblogobj(string SQLType)//复制到.CS文件内,基本采用见名之意的命名方法+驼峰命名法
{
string TextValue = "";
string InputText = "";
//string DdlValue = "";//下拉框其他人可以自己写,不要等现成的哦
string GvValue = "";
for (int i = 0; i < Page.Controls.Count; i++)
{
foreach (System.Web.UI.Control control in Page.Controls[i].Controls)
{
if (control is TextBox)//遍历所有TextBox
{
TextValue = TextValue + (control as TextBox).Text + "|";
}
if (control is HtmlInputText)//遍历所有HTML类型的TEXT
{
InputText = InputText + (control as HtmlInputText).Value + "|";
}
if (control is GridView)//遍历GridView,这是亮点,研究了好久才弄明白怎么遍历,重点难点在这里!!!!这里取的是当
//前你看到的数据!跟你绑定不绑定数据,没有关系!你看到啥,就遍历啥~!明白了吧~也就是说隐藏的字段遍历不到的!
{
for (int X = 0; X < (control as GridView).Rows.Count; X++)
{
for (int Y = 0; Y < (control as GridView).Rows[X].Cells.Count; Y++)
{
GvValue = GvValue + (control as GridView).Rows[X].Cells[Y].Text.ToString()+"|";
}
}
}//题外话:从上面的形式可以看出,想要LABEL,就换成LABEL即可,想要DDL就换成DDL
}
}
SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);//实例化地图
string IP = HttpContext.Current.Request.UserHostAddress;获取客户端IP
string PcName = HttpContext.Current.Request.LogonUserIdentity.Name;获取客户端计算机名
string kongjianValue = "TextBox为:" + TextValue + ">>HTML的text值:" + InputText + ">>GV值:" + GvValue;//把前面的值整合在一起
UserID = (int)Session["UserID"];//取Session
User U = new User(UserID);//我这里是实例化的我原有的USER类,这里其他人可以自己想办法
string FNodeName = currentNode.Url.ToString() + ">>" + currentNode.ParentNode.Title.ToString() + ">>" + currentNode.Title.ToString();//这里取的是当前地图节点信息,比如URL,标题等
//到这里信息收集完毕,再根据自己的需要,写一些其他的需要收集的信息即可
DBlog log = new DBlog(U.UserID, U.UserName, SQLType, kongjianValue, FNodeName, PcName, IP, TID.ToString());//注释:TID是我程序内的一个编号而已;收集完信息后,这里就把收集来的信息传到DBLOG类中,这个类里面只有一个接收参数,然后INSERT到数据库的简单的不能再简单的语句了,例如:inser into 数据库名.dbo.S_DBLog(参数1,参数2,参数3……),注意一点,操作日志不可能有UPDATE!永远都是INSERT!
}
//
结束了
然后需要用的时候,在相应的按钮下调用即可
比如在添加按钮的事件中,这么写:dblogobj("Add");
修改的按钮: dblogobj("UP");
返回的按钮:dblogobj("back");
可能有人会问,为什么返回按钮也要加,为了以防万一,应用到实际的时候就可能会用到了~
忘记说了,这样记录操作日志,可能文件会很大,记得要单独建立一个数据库哦~别放在实际的使用中的数据库。别忘记数据库内建立一个数据插入时间字段,不用在网站的.CS文件内添加,直接在数据库的表内在默认值上面(getdate())即可~呵呵~
这样就会记录下所有人,所有的操作记录了!除了查询的记录(没人记录这个吧?)
到时候 数据不对了 哼哼……
谁敢装不知道!谁修改的一下就知道!并且修改过几次也都可以知道的!
上一张数据库的表