silverlight大数据量录入优化-数据库处理

众所周知基于安全原因的考虑,Silverlight是不允许直接访问数据库的。我们一般采用的是通过wcf进行与数据库的交互,但是wcf对于数据的处理有诸多限制,所以当处理大数据量的时候是很不方便的

          其实对于大数据量的处理是可以优化处理的。比如当你录入的数据中本身有很多重复的数据,那就没必要通过wcf一条条上传这样就算你将它的上传上限设置的再大也会有不能承载的时候,而且速度奇慢,必要时候会导致超时,用户体验及其不好。其实这种大数据量的测试完全可以通过数据库来处理,通过存储过程。

           将参数通过存储过程来处理,因为大数据量的录入一般情况下都是有规律的,你可以将重复的参数一次性传入,不重复的数据通过分隔符间隔,然后再到数据库中处理(可以自写split函数)通过表对象等循环实现数据录入(有些特殊的,比如你需要录入的数据数据库中本来就存储更加方便无需循环,稍后发一个相关实例代码).之前我做了个测试直接用wcf上传花费的时间为 8分钟,同样测试环境(数据,数据库,服务器(本机调试))用存储过程是秒杀,具体几秒没测试,我只知道我点击之后立刻提示发送成功当然我的测试用例属于特殊数据库中原先已经有数据相关表。但是我觉得即使加上split循环插入临时表这个步骤也不会耗费多长时间。

 

具体代码如下

 

 

Create Proc  [dbo].[Proc_AddEmail]
 @Sender char(36), --发件人
 @Subject varchar(255),--邮件主题
 @Addressee text,--收件人的工号/学号
 @Message text, --邮件的内容
    @IsPublic bit --邮件是否公共
as
DECLARE @ERROR INT              --定义错误对象
 SET @ERROR=0
Begin
    Begin Tran
          declare @MailID char(36),@MailDate char(36)--邮件ID、当前日期声明
          --邮件ID、当前日期赋值
          set @MailID=NewID()
          set @MailDate=getdate() 
              insert into dbo.Tbl_Mail(MailID,Subject,MailDate,FromID,[Message],IsPublic,RecordStatus)
                   values(@MailID,@Subject,@MailDate,@Sender,@Message,@IsPublic,'A')
        SET @ERROR=@@error+@ERROR
  if @IsPublic=1
   begin
               --插入学生用户
               insert into Tbl_MailInbox(MailID,UserNO,UserType,ReCordStatus)
               select @MailID, studentID,'2','A' from Tbl_student where ReCordStatus='A'
               set @Error=@@error+@Error
               --插入老师用户
               insert into Tbl_MailInbox(MailID,UserNO,UserType,ReCordStatus)
               select @MailID, TeacherID,'1','A' from Tbl_Teacher where ReCordStatus='A'
               set @Error=@@error+@Error
   end
  else
     begin
            --插入学生用户
             insert into Tbl_MailInbox(MailID,UserNO,UserType,ReCordStatus)
             select @MailID, studentID,'2','A' from Tbl_student where ReCordStatus='A'
             and charindex(studentID,@Addressee)>0
             set @Error=@@error+@Error
             --插入教师用户
             insert into Tbl_MailInbox(MailID,UserNO,UserType,ReCordStatus)
             select @MailID, TeacherID,'2','A' from Tbl_Teacher where ReCordStatus='A'
             and charindex(TeacherID,@Addressee)>0
             set @Error=@@error+@Error
  end
  
    if @ERROR=0
          
  Commit
 ELSE
  ROLLBACK
 end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值