表A:主表
主键:classid表B:明细表
主键:classid+recordid
用一些textbox和datagridview,同时编辑这两个表。现在有存储过程 GetData,传入参数classid,可同时返还A表和B表对应classid的数据。然后再写两个更新的过程SetDataA和SetDataB,对于SetDataB是用循环取datagridview的记录,然后调用SetDataB过程来更新记录的。也就是说这个过程需要调用很多次存储过程,这样效率比较低下,大家是怎么做的?

解决方案 »

  1.   

    关键是这样每条都要调用存储过程一次,这样比较麻烦。数据库是sqlserver2005,有没有批处理的方法。
      

  2.   

    存储过程 支持 XML,可以批处理的
      

  3.   

    简单的表可以用adapter做,但这个需要在存储过程里稍微做一些操作的,而且主要是显示的数据是一个视图出来的,不是直接编辑原表的,这种有什么自动化一点的方法没有?
      

  4.   

    现在数据处理上都采用ORM的方式,是节约程序员工作量的绝好实践
    .NET有NH和CASTLE
      

  5.   


    我想如果自己封装的话,那就这样吧。跟datagridview本身的一些状态类似,在明细记录中(按你说的使用xml),数据中增加状态(“删除”、“更新”、“新增”),本地的数据判断好状态,以这样的形式写入xml,然后在存储过程中判断。有时数据编辑是会比较多的,而且是远程数据库,网络传输量是首要考虑的内容。你们平常项目中也是这样的么?我想有没有应用过比较好的解决方案。
      

  6.   

    我觉得你考虑过多,小项目 直接删掉重新插入
    大项目 用存储过程本身就是不对的,会封装业务层//而且是远程数据库,网络传输量是首要考虑的内容
    你对DAL层的操作再怎么简化,你的网络传输量还是不变的
      

  7.   


    比如我之前每条调用一次存储过程,这样我想理论上都是会比较慢的。而且数据量来说也还是会增加一些的。现在如果使用XML,是否也会增加一些?但相比多次调用,应该会好一些的。
      

  8.   

    兄弟,用XML调用1次存储过程明显比多次调用好,还能兼顾事务问题
    但你需要处理XML的格式
    存储过程能把XML直接当表处理
      

  9.   

    你可以用类似:
    insert into tablea
    select a,b,c from xml这种方式一次性处理
    这个性能我发现最高效的批量处理方式,比DataAdapte批处理还快
      

  10.   


    OK,谢谢,我看看。终于感觉到了,几年过去,自己也成outman了~~~很多年前在学校.net1.0的时候做的bs项目,一般数据编辑使用grid的,当时比较简单。所以没有考虑太多。最近用的2.0,做c/s的,也没有打算在中间加业务层。按我帖子前面的方法做了一些,但感觉总是不太方便,整个方法并不是很好。
      

  11.   


    恩。我刚才看了一下xml的方式,决定就采用这种方式了。慢慢把之前改过来。这样事务处理也可以都放到存储过程里面。
    谢谢cxx1997