表A:主表
主键:classid表B:明细表
主键:classid+recordid
用一些textbox和datagridview,同时编辑这两个表。现在有存储过程 GetData,传入参数classid,可同时返还A表和B表对应classid的数据。然后再写两个更新的过程SetDataA和SetDataB,对于SetDataB是用循环取datagridview的记录,然后调用SetDataB过程来更新记录的。也就是说这个过程需要调用很多次存储过程,这样效率比较低下,大家是怎么做的?
主键:classid表B:明细表
主键:classid+recordid
用一些textbox和datagridview,同时编辑这两个表。现在有存储过程 GetData,传入参数classid,可同时返还A表和B表对应classid的数据。然后再写两个更新的过程SetDataA和SetDataB,对于SetDataB是用循环取datagridview的记录,然后调用SetDataB过程来更新记录的。也就是说这个过程需要调用很多次存储过程,这样效率比较低下,大家是怎么做的?
.NET有NH和CASTLE
我想如果自己封装的话,那就这样吧。跟datagridview本身的一些状态类似,在明细记录中(按你说的使用xml),数据中增加状态(“删除”、“更新”、“新增”),本地的数据判断好状态,以这样的形式写入xml,然后在存储过程中判断。有时数据编辑是会比较多的,而且是远程数据库,网络传输量是首要考虑的内容。你们平常项目中也是这样的么?我想有没有应用过比较好的解决方案。
大项目 用存储过程本身就是不对的,会封装业务层//而且是远程数据库,网络传输量是首要考虑的内容
你对DAL层的操作再怎么简化,你的网络传输量还是不变的
比如我之前每条调用一次存储过程,这样我想理论上都是会比较慢的。而且数据量来说也还是会增加一些的。现在如果使用XML,是否也会增加一些?但相比多次调用,应该会好一些的。
但你需要处理XML的格式
存储过程能把XML直接当表处理
insert into tablea
select a,b,c from xml这种方式一次性处理
这个性能我发现最高效的批量处理方式,比DataAdapte批处理还快
OK,谢谢,我看看。终于感觉到了,几年过去,自己也成outman了~~~很多年前在学校.net1.0的时候做的bs项目,一般数据编辑使用grid的,当时比较简单。所以没有考虑太多。最近用的2.0,做c/s的,也没有打算在中间加业务层。按我帖子前面的方法做了一些,但感觉总是不太方便,整个方法并不是很好。
恩。我刚才看了一下xml的方式,决定就采用这种方式了。慢慢把之前改过来。这样事务处理也可以都放到存储过程里面。
谢谢cxx1997