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 12:00:37

*     ----------------------------

*     Exception:ExecuteNonQuery: Connection 属性尚未初始化。

**************************************************

 

**************************************************

*     DateTime:2006-6-22 12:00:37

*     ----------------------------

*     Exception:ExecuteNonQuery 需要打开的并且可用的连接。该连接的当前状态是 Closed

**************************************************

 

**************************************************

*     DateTime:2006-6-22 12:00:38

*     ----------------------------

*     Exception:ExecuteNonQuery: CommandText 属性尚未初始化

**************************************************

 

**************************************************

*     DateTime:2006-6-22 12:00:38

*     ----------------------------

*     Exception:对象名 'test' 无效。

**************************************************

 

**************************************************

*     DateTime:2006-6-22 12:00:38

*     ----------------------------

*     Connection:data source=test;initial catalog=northwind;user id=sa;

*     CommandText:select * from orders

**************************************************

 
下载测试代码

posted on 2006-06-22 12:04  henry  阅读(1412)  评论(0编辑  收藏  举报

导航