惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
Hugging Face - Blog
Hugging Face - Blog
L
LINUX DO - 热门话题
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
D
Docker
C
Cyber Attacks, Cyber Crime and Cyber Security
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
T
Tenable Blog
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
Arctic Wolf
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
The Hacker News
The Hacker News
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Vercel News
Vercel News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
Scott Helme
Scott Helme
A
About on SuperTechFans
WordPress大学
WordPress大学
F
Fortinet All Blogs
大猫的无限游戏
大猫的无限游戏
G
GRAHAM CLULEY
Latest news
Latest news
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Schneier on Security

博客园 - lifz

捕获asp.net下的未处理异常 延迟加载的一般实现 (ZT)在Struts中使用Validator框架 业界内广为流传的关于项目管理的通俗讲解 IPM 认识到单元测试的重要性 项目小结 SQL Server多事务并发问题 4xx: Client Error 使用者端(浏览器)错误讯息 Audit审计 加密技巧 COM+组件提供的企业级服务 An n-tiered Approach of Asp.Net .NET企业服务器要点 jsp页面请求过程 asp.net页面处理过程 How to J2EE Asp.net Authorization Asp.net Authentication
Stored Procedure Temp Table Excel Template Export
lifz · 2005-09-14 · via 博客园 - lifz


public void ExecuteSP_MonthPreIncome(string year, string month)
  {
   try
   {
    using(System.Data.OleDb.OleDbConnection conn = SqlServerHelper.getConnection())
    {
     OleDbParameter spParms1 = new OleDbParameter("begDate", SqlDbType.VarChar);
     OleDbParameter spParms2 = new OleDbParameter("endDate", SqlDbType.VarChar);

     string nextmonth = System.String.Format("{0:00}",Convert.ToInt32(month)+1);
     spParms1.Value = year+"-"+month+"-01";    
     spParms2.Value = year+"-"+nextmonth+"-01";
     
     conn.Open();
     OleDbCommand cmd = new OleDbCommand();
     cmd.Connection = conn;
     cmd.CommandType = CommandType.StoredProcedure;
     cmd.Parameters.Add(spParms1);
     cmd.Parameters.Add(spParms2);

     cmd.CommandText = "sp_Month_PreIncome";

     cmd.ExecuteNonQuery();
    }
   }
   catch(Exception ex)
   {
    throw new Exception("统计 预收费用户当月扣款收入 失败!",ex);
   }
  }
  /// <summary>
  /// 预收费用户当月扣款收入
  /// </summary>
  /// <param name="year">year</param>
  /// <param name="month">month</param>
  public void ExportMonthPreIncome(string year, string month)
  {
   try
   {
    string SheetName = Common.EXCELRPT_TYPE.预收费收入.ToString()+"_"+year+month;
    string filename = Common.Common.AppPath+"\\Reports\\"+SheetName+".xls";
  
    //复制刚才创建的模板文件为新文件,建议将模板文件放入数据库中,使用时将文件下载到本地
    FileInfo mode=new FileInfo(Common.Common.AppPath+"\\预收费用户当月扣款收入.xls");
    try
    {
     mode.CopyTo(filename,true);
    }
    catch(Exception ee)
    {
     MessageBox.Show(ee.Message);
     return;
    } 

    //打开复制后的文件
    object missing=Missing.Value;
    Excel.Application myExcel=new Excel.Application ( );
    //打开新文件
    myExcel.Application.Workbooks.Open(filename,
     missing,
     missing,
     missing,
     missing,
     missing,
     missing,
     missing,
     missing,
     missing,
     missing,
     missing,
     missing);
    //将Excel显示出来
    myExcel.Visible=true;

    //=====================================================================//
    //读入第一个单元格的内容,从该单元格中得到实际内容应该从什么地方开始写入
    //=====================================================================//
    //得到当前的工作簿
    Excel.Workbook myBook=myExcel.Workbooks[1];
    Excel.Worksheet mySheet=(Excel.Worksheet)myBook.Worksheets[1];
    Excel.Range r=mySheet.get_Range(mySheet.Cells[6,1],mySheet.Cells[6,1]); 
    string strValue=r.Value.ToString();
    mySheet.Cells[6,1]="";//清空存放起始位置数据的单元格
    mySheet.Name = SheetName;

    //分离出起始位置和列数
    int startx,starty,len;
    string[] strInfo=strValue.Split(',');
    starty=int.Parse(strInfo[0]);
    startx=int.Parse(strInfo[1]);
    len=int.Parse(strInfo[2]);

    int i = 0;
    string sql = "select * from tmp_month_preincome";
    using(System.Data.OleDb.OleDbConnection conn = SqlServerHelper.getConnection())
    {
     conn.Open();
     //
     OleDbCommand cmd = new OleDbCommand(sql, conn,null);
     OleDbDataReader myReader = cmd.ExecuteReader();
     while(myReader.Read())
     {  
      if(!myReader.IsDBNull(0))      
       myExcel.Cells[starty+i,startx+0]="'"+myReader.GetString(0);
      if(!myReader.IsDBNull(1))      
       myExcel.Cells[starty+i,startx+1]= myReader.GetDecimal(1);
      if(!myReader.IsDBNull(2))      
       myExcel.Cells[starty+i,startx+2]= myReader.GetInt32(2);
      if(!myReader.IsDBNull(3))      
       myExcel.Cells[starty+i,startx+3]= myReader.GetInt32(3);
      if(!myReader.IsDBNull(4))      
       myExcel.Cells[starty+i,startx+4]= myReader.GetInt32(4);
      if(!myReader.IsDBNull(5))      
       myExcel.Cells[starty+i,startx+5]= myReader.GetInt32(5);
      if(!myReader.IsDBNull(6))      
       myExcel.Cells[starty+i,startx+6]= myReader.GetDecimal(6);
      if(!myReader.IsDBNull(7))      
       myExcel.Cells[starty+i,startx+7]= myReader.GetDecimal(7);
      if(!myReader.IsDBNull(8))      
       myExcel.Cells[starty+i,startx+8]= myReader.GetDecimal(8);
      if(!myReader.IsDBNull(9))      
       myExcel.Cells[starty+i,startx+9]= myReader.GetDecimal(9);
      if(!myReader.IsDBNull(10))      
       myExcel.Cells[starty+i,startx+10]= myReader.GetDecimal(10);
      if(!myReader.IsDBNull(11))      
       myExcel.Cells[starty+i,startx+11]= myReader.GetDecimal(11);
      //
      i++;
     }
       
    }
    #region
    //
    //   //,本例中共有10行数据(第一行不是数据),实际时可以用MyDataSet.Tables[myTableName].Rows.Count之类来判断
    //   int nCount=10;
    //   //逐列写入数据,数组中第一行我列标题,忽略
    //   for(int j=0;j<len;j++)
    //   {
    //    //得到当前列的字段名称,本例中不使用
    //    //r=mySheet.get_Range(mySheet.Cells[starty,startx+j],mySheet.Cells[starty,startx+j]);
    //    //string strFieldName=r.Value.ToString();
    //    //逐行写入本列数据
    //    for(int i=0;i<nCount;i++)
    //    {
    //     //以单引号开头,表示该单元格为纯文本
    //     myExcel.Cells[starty+i,startx+j]="'"+myData[i+1,j];
    //     //实际使用时用myExcel.Cells[starty+i,startx+j]="'"+row[strFieldName].ToString();,这也就是为什么
    //     //要提取字段名的原因
    //    }
    //   }
   
    #endregion

    
    r=mySheet.get_Range(mySheet.Cells[starty+i,startx],mySheet.Cells[starty+i,len]);
    r.Select();
    r.Cells.Interior.ColorIndex = 40;

    //求和
    int rowsum = starty+i-6;
    r.Cells.FormulaR1C1 = "=SUM(R[-"+rowsum.ToString()+"]C:R[-1]C)";
   
    //
    myExcel.Cells[starty+i,1]="'本月合计";
    myExcel.Cells[starty+i,startx+12]="'";
  
    //核查事项
    int addrows = 7;
    for(int k=1;k<=addrows;k++)
    {
     myExcel.Cells[starty+i+k,1]="'";
    }   
    addrows += 1;
    myExcel.Cells[starty+i+addrows,1]="'需核查事项小计";
    r=mySheet.get_Range(mySheet.Cells[starty+i+addrows,startx],mySheet.Cells[starty+i+addrows,len]);
    r.Select();
    r.Cells.Interior.ColorIndex = 40;

    //将列标题和实际内容选中
    myBook=myExcel.Workbooks[1];
    mySheet=(Excel.Worksheet)myBook.Worksheets[1];
    r=mySheet.get_Range(mySheet.Cells[starty-1,startx],mySheet.Cells[starty+i+addrows,len]);
    r.Select();
    //=====通过执行宏来格表格加边框=======//
    try
    {
     myExcel.Run("加边框",missing,missing,

      missing,missing,missing,missing,missing,missing,missing,

      missing,missing,missing,missing,missing,missing,missing,

      missing,missing,missing,missing,missing,missing,missing,

      missing,missing,missing,missing,missing,missing,missing);
    }
    catch
    {
    }

    //保存修改
    myBook.Save();      
   }    
   catch(Exception )
   {
   }
  
  }

CREATE PROCEDURE [sp_Month_PreIncome]
 @begDate varchar(20),
 @endDate varchar(20)
AS

declare @cpChargeId varchar(20)
declare @orgId varchar(20) --
declare @amount decimal(8,2)

--申明变量
declare @orgName varchar(200) --单位
declare @preamount decimal(8,2) --预收金额
declare @corpcard int --法人卡
declare @opercard int --操作员卡
declare @corpcardopen int --开户
declare @opercardopen int
declare @corpcardupdt int --更新
declare @opercardupdt int
declare @yearfee decimal(8,2)--年费
declare @funcfee1 decimal(8,2)--年费之增值功能费
declare @flowfee decimal(8,2)--流量费
declare @funcfee2 decimal(8,2)--流量费之增值功能费
declare @sumamout decimal(8,2)--收款总额
declare @remain decimal(8,2)--预付费余额
 
--申明汇总变量
declare @sumpreamount decimal(8,2) --预收金额
declare @sumcorpcardopen int --开户
declare @sumopercardopen int
declare @sumcorpcardupdt int --更新
declare @sumopercardupdt int
declare @sumyearfee decimal(8,2)--年费
declare @sumfuncfee1 decimal(8,2)--年费之增值功能费
declare @sumflowfee decimal(8,2)--流量费
declare @sumfuncfee2 decimal(8,2)--流量费之增值功能费
declare @sumsumamout decimal(8,2)--收款总额
declare @sumremain decimal(8,2)--预付费余额

set @sumpreamount = 0
set @sumcorpcardopen = 0
set @sumopercardopen = 0
set @sumcorpcardupdt = 0
set @sumopercardupdt = 0
set @sumyearfee = 0
set @sumfuncfee1 = 0
set @sumflowfee = 0
set @sumfuncfee2 = 0
set @sumsumamout = 0
set @sumremain = 0

--删除数据
delete from tmp_month_preincome

--遍历T_Bill, 查找OrgID及其OrgName、余额
declare cur1 cursor for
select DISTINCT b.OrgID, o.OrgName, r.Remain
from T_Bill b
left join T_OrgInfo o on b.OrgID = o.OrgCode
left join T_OrgRemain r on r.OrgId = b.OrgId
where b.Recondate >= @begDate and b.Recondate < @endDate and b.Status = 2 and b.AutoFlag = 1

open cur1
fetch next from cur1 into @orgId,@orgName,@remain
while @@fetch_status = 0
 begin
   --本月充值总额
   declare cur3 cursor for
   select sum(Amount) as summnt from T_CashFlow
   where OperationTime >= @begDate and OperationTime < @endDate and OrgID = @orgId and OperationType = 1
   open cur3
   fetch from cur3 into @preamount
   close cur3
   deallocate cur3

   --根据OrgID查找其所有账单
   declare cur2 cursor for
   select b.ReconAmt,b.cpChargeID,
   c.CorpCardCount, c.OperCardCount
 from T_Bill b
 left join T_Card c on c.BillID = b.BillId
 where b.OrgID = @orgId and b.Recondate >= @begDate and b.Recondate < @endDate
  and b.Status = 2 and b.AutoFlag = 1
 open cur2

 set @yearfee = 0
 set @funcfee1 = 0
 set @flowfee = 0
 set @funcfee2 = 0
 declare @isyearfee int, @addvalue decimal(8,2)
 set @isyearfee = 0
 set @addvalue = 0
 set @sumamout = 0

 fetch next from cur2 into @amount,@cpChargeId, @corpcard, @opercard
 while @@fetch_status = 0
         begin
    --汇总账单  
  if(@cpChargeId='01010000')   --如果计费类型是开户费,查找法人卡和操作员卡
   begin
    set @corpcardopen = @corpcardopen + @corpcard * 380
    set @opercardopen = @opercardopen + @opercard * 250
    set @sumamout = @sumamout + @corpcardopen + @opercardopen
   end
   else if(@cpChargeId = '01020000')--如果是证书更新费,查找法人卡和操作员卡
   begin
    set @corpcardupdt = @corpcardupdt + @corpcard * 380
    set @opercardupdt = @opercardupdt + @opercard * 250
    set @sumamout = @sumamout + @corpcardupdt + @opercardupdt
   end
   else if(@cpChargeId = '01030101')--如果是年费   
   begin
    set @yearfee = @yearfee + @amount
    set @sumamout = @sumamout + @yearfee
    set @isyearfee = 1
   end
    else if(@cpChargeId = '01030400')--如果是流量费  
   begin
    set @flowfee = @flowfee + @amount
    set @sumamout = @sumamout + @flowfee   
   end
   else if(@cpChargeId = '01040000')--如果是增值功能费 
   begin
    set @addvalue = @addvalue + @amount
    set @sumamout = @sumamout + @addvalue
   end
    
   --下一个账单
   fetch next from cur2 into @amount,@cpChargeId, @corpcard, @opercard
  end

 close cur2
 deallocate cur2

 --是否是年费用户
 if  @isyearfee = 1
  begin
  set @funcfee1 = @addvalue
         end
 else
  begin
  set @funcfee2 = @addvalue
         end
 
 --写入临时表
 --to do
 insert into tmp_month_preincome
 (
  orgName,
  preamount ,
  corpcardopen,
  opercardopen,
  corpcardupdt,
  opercardupdt,
  yearfee ,
  funcfee1 ,
  flowfee ,
  funcfee2 ,
  sumamout ,
  remain
 )values
 (@orgName,@preamount,@corpcardopen, @opercardopen, @corpcardupdt, @opercardupdt, @yearfee, @funcfee1, @flowfee, @funcfee2, @sumamout, @remain)
 
 --汇总 
 set @sumpreamount = @sumpreamount + @preamount
 set @sumcorpcardopen = @sumcorpcardopen + @corpcardopen
 set @sumopercardopen = @sumopercardopen + @opercardopen
 set @sumcorpcardupdt = @sumcorpcardupdt + @corpcardupdt
 set @sumopercardupdt = @sumopercardupdt + @opercardupdt
 set @sumyearfee = @sumyearfee + @yearfee
 set @sumfuncfee1 = @sumfuncfee1 + @funcfee1
 set @sumflowfee = @sumflowfee + @flowfee
 set @sumfuncfee2 = @sumfuncfee2 + @funcfee2
 set @sumsumamout = @sumsumamout + @sumamout
 set @sumremain = @sumremain + @remain

  --下一个企业
  fetch next from cur1 into @orgId, @orgName, @remain
 end

close cur1
deallocate cur1--关闭游标,释放资源
GO