四层架构 界面 -> 业务 -> 逻辑 -> 数据---------业务层--------------------------
方法1
{
  对象.操作();
}---------逻辑层-------------------------
对象.操作()
{
   string sql1 = "操作表1";
   string sql2 = "操作表2";
   Conn conn = new Conn();//连接对象
   conn.执行(sql1 );
   conn.执行(sql1 );
   对象.某个属性.操作()
}对象.某个属性.操作()
{
   string sql3 = "操作表3";
   Conn conn = new Conn();//连接对象
   conn.执行(sql3);
}
----------------------------
我如果在不改变调用形式的前提下,
业务层如何得到逻辑层共执行了多少SQL,及SQL的参数对象最好也能得到不改变调用形式:不重载,不改返回值,等等,
因为整个程序里到处是这样的调用,如果每个方法都有改动,工作量太大,有点类似于在 业务层.方法1 的大括号间加个监听,反射???
断点调式的时候,可以调式出 对象.操作()的所有语句及数据, 我怎么得到, 能不能得到

解决方案 »

  1.   

    要想调试只需将工程内包含逻辑层代码,逻辑层设置断点就可以了。
    如果想看SQL语句可以在每个执行SQL语句的地方,把SQL文写入到日志文件中就行了。
    日志行记录例如:
    日期+时间+模块名+方法名+SQL语句
      

  2.   

    我做的是办公OA系统, 现在好多模块都要加审批,
    也就是在 对象.操作()时, 把要执行的SQL 放在一边, 
    等审批通过后再从数据库取出来执行
      

  3.   

    看到高手二字,本来是不打算进来的,但是那该死的好奇心作怪.根据你的代码,
    Conn conn = new Conn();//连接对象 
      conn.执行(sql1 ); 
      conn.执行(sql1 ); 你都是直接使用最基层的conn达到所要的操作,没有将它封装到DAL中. 如何能改?如果你的conn.执行(sql)是有一个类似的通用方法的话,很简单,在该通用方法底下加一行记录日志的语句就搞定了,像这样:public 执行(sql1)
    {
      conn.Execute(sql1);
      sqlLog = "insert into Log values (sql1)"
      conn.Execute(sqlLog);
    }
      

  4.   

    使用SQL Server的Profile工具进行监控,就可以看到你当前执行的SQL语句了
      

  5.   


    在数据库中设状态的话, 一般只限于审批新建数据, 如果是更新数据或删除数据, 如何廷时操作-----------------------------------------根据你的代码, 
    Conn conn = new Conn();//连接对象 
      conn.执行(sql1 ); 
      conn.执行(sql1 ); 你都是直接使用最基层的conn达到所要的操作,没有将它封装到DAL中. 如何能改? 如果你的conn.执行(sql)是有一个类似的通用方法的话,很简单,在该通用方法底下加一行记录日志的语句就搞定了,像这样: public 执行(sql1) 

      conn.Execute(sql1); 
      sqlLog = "insert into Log values (sql1)" 
      conn.Execute(sqlLog); 
    }------------------
    您所说的 类似的通用方法 ,是否是指,所有的对象都实现一个 类似于 IConnExecute 的接口,
    对象的数据库操作都使用这个接口执行, 那样的话, 我还是得在所有对象的数据库操作方法里作改动...问题是我的项目还应用到一个开源框架,
    所有对象都只提供(或只用写) SELECT , UPDATE , INSERT, DELETE 四句SQL
    而真正的操作conn.Execute(sql)是由框架完成,
    业务层继承框架的某个应用类, UPDATE 时, 只是框架继承对象.DoUpate();还是回到开始的问题

    有点类似于在 业务层.方法1 的大括号间加个监听,反射??? 
    断点调式的时候,可以调式出 对象.操作()的所有语句及数据, 我怎么得到, 能不能得到
      

  6.   

    既然用到的是开源框架,那就看看它的源代码,(要不开源干什么),看看能不能加些功能.如果懒得看源代码,那我看你就在需要的表中加触发器,每当执行INSERT UPDATE DELETE后就触发记录日志的操作.
      

  7.   


    界面 -> 业务 -> 逻辑 -> 数据 的 四层架构 
    数据库的操作怎么再封装业务层设定对象操作,交给逻辑层产出SQL语句, 再交给数据层执行, 有什么问题

      

  8.   


    开源框架.很多东西也是自动生成的吧.看一下框架结构.在框架里面添加Inserting,Updateing,Deleteing事件(这些操作用于你在执行增删改查之前触发),在程序里执行INSERT UPDATE DELETE操作之前Override上面框加里的Inserting,Updateing,Deleteing事件,
    调用的时候
    //偶合重写的事件
    方法1 

    if(事件!=null)//判断事件是否为空
    {
    //执行事件操作
    }
      对象.操作(); 

      

  9.   


    这个比较适合Lz吧
    反正要么就在代码中做个用于统计数据的类,在各个方法中调用;要么就是sql中做触发器。不过个人感觉你做个统计数据的类比较好
      

  10.   

    我们用的是五大层的ORM框架,而且只是服务器端,客户端还有一个代理层与服务器端的WebService层做连接通道
      

  11.   

    业务逻辑层 里面负责数据库操作吗?  应该放到数据层做吧逻辑层 应该是对数据处理的吧让数据符合业务实体bll层尽量不要包含 SQL操作 尽量放到DAl进行啊!