HFSoft.Aop对SqlCommand方法拦载处理(功能测试)
HFSoft.Aop是一个采用动态代理拦载的Aop组件,因为这种方式在生成代理时有所限制,所以组件只会对接口成员进行拦载处理.组件的功能基本完成,为了保证组件功能的正确性,因此对组件编写一些功能测试例子;以下是运用组件对SqlCommand的执行方法进行拦载处理.
实现拦载处理对象:
public class CmdExecute:HFSoft.Aop.CutinerAdapter
{
public override object Executed(object returnvalue)
{
System.Data.IDbCommand cmd = (System.Data.IDbCommand)Source;
System.IO.StreamWriter sw = new System.IO.StreamWriter("c:\\commandExecuteLog.txt",true);
sw.WriteLine("");
sw.WriteLine("**************************************************");
sw.WriteLine("* DateTime:" + DateTime.Now);
sw.WriteLine("* ----------------------------");
if(Error == null)
{
sw.WriteLine("* Connection:" + cmd.Connection.ConnectionString);
sw.WriteLine("* CommandText:" + cmd.CommandText);
}
else
{
sw.WriteLine("* Exception:" + Error.Message);
}
sw.WriteLine("**************************************************");
sw.Close();
Error = null;
return base.Executed (returnvalue);
}
}
拦载对象把SqlCommand方法执行过程记录到文件中.为了测试方便拦载对象把错误屏蔽,保证程序运行过程不会因为异常导致程序终止.
对SqlCommand对象的ExecuteNonQuery,ExecuteReader,ExecuteScalar方法进行拦载配置.
<accepter type="System.Data.SqlClient.SqlCommand,System.Data">
<coiner method="ExecuteNonQuery,ExecuteReader,ExecuteScalar" type="Aoptestapp.CmdExecute,Aoptestapp" />
</accepter>
编写不同情况的执行代码.
string connstring ="data source=test;initial catalog=northwind;user id=sa;pwd=;";
System.Data.IDbConnection conn = null;
System.Data.IDbCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd = (System.Data.IDbCommand)HFSoft.Aop.AopService.Aspect(cmd);
cmd.ExecuteNonQuery();
conn= new System.Data.SqlClient.SqlConnection(connstring);
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Open();
cmd.ExecuteNonQuery();
cmd.CommandText ="select * from test";
cmd.ExecuteNonQuery();
cmd.CommandText ="select * from orders";
cmd.ExecuteNonQuery();
拦载输出结果
**************************************************
* DateTime:2006-6-22
* ----------------------------
* Exception:ExecuteNonQuery: Connection 属性尚未初始化。
**************************************************
**************************************************
* DateTime:2006-6-22
* ----------------------------
* Exception:ExecuteNonQuery 需要打开的并且可用的连接。该连接的当前状态是 Closed。
**************************************************
**************************************************
* DateTime:2006-6-22
* ----------------------------
* Exception:ExecuteNonQuery: CommandText 属性尚未初始化
**************************************************
**************************************************
* DateTime:2006-6-22
* ----------------------------
* Exception:对象名 'test' 无效。
**************************************************
**************************************************
* DateTime:2006-6-22
* ----------------------------
* Connection:data source=test;initial catalog=northwind;user id=sa;
* CommandText:select * from orders
**************************************************