服务器文档下载zip格式
刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚。开始吧。(MVC的)
@using Rattan.Core.Utility;
@{
string ButtonScript = string.Empty;
}
@if (Rattan.Basic.Globals.GetIsAuth(ViewBag.AuthValues, "QuickExport"))
{
ButtonScript = @"
{
position: 0,
id: 'btnQuickExport',
text: '导出稿件附件',
disabled: false,
icon: 'pwd.gif',
handler: function ()
{
QuickExport();
}
}";
}
///
/// 压缩打包文件
///
public ActionResult ZipFileByCode(string Draft_Ids)//string Draft_Id
{
MemoryStream ms = new MemoryStream();
byte[] buffer = null;
using (ZipFile file = ZipFile.Create(ms)) //压缩包创建到内存
{
file.BeginUpdate();
file.NameTransform = new IndexController();//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。
string where = "Draft_Id in (" + Draft_Ids + ")";
var draftInfo = Meeting_DraftRepository.Instance.GetMany(where).ToList();
foreach (var draftInfoList in draftInfo)
{
if (string.IsNullOrWhiteSpace(draftInfoList.filelist) || draftInfoList.filelist.IndexOf('/') < 0)
{
continue;
}
var positonIndex = draftInfoList.filelist.LastIndexOf('/');
string fileName = draftInfoList.filelist.Substring(positonIndex, draftInfoList.filelist.Length - positonIndex);//客户端保存的文件名
file.Add(Server.MapPath(draftInfoList.filelist));
}
file.CommitUpdate();
buffer = new byte[ms.Length];
ms.Position = 0;
ms.Read(buffer, 0, buffer.Length);
}
//将中文转换预防出现乱码
string excelName = "稿件附件".ToString();
excelName = HttpUtility.UrlEncode(excelName, System.Text.Encoding.UTF8);
DateTime dt = DateTime.Now;
Response.AddHeader("content-disposition", "attachment;filename=" + excelName + DateTime.Now.ToString("yyyyMMdd")+ ".zip");
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
return View();
}
}
SQL Server SQL分页查询
SQL Server SQL分页查询的几种方式
目录
0. 序言
1. TOP…NOT IN…
2. ROW_NUMBER()
3. OFFSET…FETCH
4. 执行计划
5. 补充
-
0.序言
总结一下SQL Server种常用的几种分页查询:
本示例中用的时已有的表,建表不规范,Name作为主键,建议实际使用中专门设置主键并且WHERE条件中尽可能使用主键。
参数说明:
@pageSize:分页查询每页N条数据时每页期望的数据量N
@offset:分页查询第I页每页N条数据时,第I页之前的N*(I-1)条数据
举个栗子:假如我们要查询第3页的数据,每页10条数据,则 @pageSize为10,@offset为20。
基本原理:查询 @pageSize 条数据,先使用一个子查询查询出符合查询条件的 @offset条数据的主键,再使用TOP @pageSize查询@pageSize条数据,并且再WHERE从句中使用 NOT IN 关键词来对数据进行筛选。
基本原理:在SQL Server2005之后加入,可以使用 ROW_NUMBER()函数为查询出来的记录生成一个行号,需要指定一个ORDER BY 子句确定排序方式,排序方式不同,行号也可能不同。详细说明:ROW_NUMBER()
本文只涉及OVER从句中跟随ORDER BY子句,partition by 从句不在本文讨论范围内,partition by 和OVER详细说明戳这里
这里使用了两个ROW_NUMBER()函数的例子,这两个计算总行数的方式是不一样的,本文结尾处会对比一个两种方式的IO操作以说明哪种方式更适合
OFFSET是SQL Server 2012中新增的语法,可以单独使用,也可与FETCH NEXT一起使用,单独使用OFFSET时是查询获取@offset之后所有的数据,如下图所示
但我们想要的是分页查询,那就需要和FETCH NEXT联合使用,OFFSET后跟@offset参数,FETCH NEXT 后跟 @pageSize参数
4.执行计划
上面四种查询方式的执行计划如下:
OFFSET…FETCH补充:
关于参数,推荐用法:始终使用ROWS,始终使用NEXT
-- OFFSET {@offset} ROWS FETCH NEXT {@pagesize} ROWS ONLY
/*
*使用 OFFSET-FETCH 中的限制:
*** ORDER BY 是使用 OFFSET 和 FETCH 子句所必需的。
*** OFFSET 子句必须与 FETCH 一起使用。永远不能使用 ORDER BY … FETCH。
*** TOP 不能在同一个查询表达式中与 OFFSET 和 FETCH 一起使用。
*** OFFSET/FETCH 行计数表达式可以是将返回整数值的任何算术、常量或参数表达式。该行计数表达式不支持标量子查询。
*/
更多OFFSET信息参考这里
对比一下ROW_NUMBER()两种计算数据总数方式的IO消耗:
第一个是使用MAX(RowNum)来计算总数的,第二种是使用子查询的方式来计算总数。
C#过滤html标签
C#过滤html标签
在项目中遇到这样一个需求,需要将一段html转换为一般文本返回,万能的正则表达式来了。
正则表达式来拯救你,代码如下:
1 public static string Html2Text(string htmlStr) 2 3 { 4 5 if (String.IsNullOrEmpty(htmlStr)) 6 7 { 8 9 return ""; 10 11 } 12 13 string regEx_style = "