C#下载csv代码总结(解决中文乱码问题)
2023-09-11 14:14:05 时间
- /// <summary>
- /// 下载
- /// </summary>
- /// <param name="startTime"></param>
- /// <param name="endTime"></param>
- public void Download(DateTime? startTime, DateTime? endTime)
- {
- Response<VSysLog> _rsp = new Response<VSysLog>();
- try
- {
- using (NetEntities et = new NetEntities())
- {
- startTime = startTime == null ? DateTime.Now.AddMonths(-) : startTime.Value;
- endTime = endTime == null ? DateTime.Now : endTime.Value;
- int deviceType = (int)EnumDeviceType.网关设备;
- //搜索条件
- var whereQuery = PredicateExtensions.True<net_warninglog>();
- //搜索条件---开始时间和结束时间
- whereQuery = whereQuery.And(n => n.WarningTime >= startTime && n.WarningTime <= endTime);
- //搜索条件---设备类型
- whereQuery = whereQuery.And(n => n.DeviecType == deviceType);
- //搜索条件---模糊查询
- if (!string.IsNullOrEmpty(Request["condition"]))
- {
- string condition = Request["condition"];
- whereQuery = whereQuery.And(n => n.WarningSource.Contains(condition));
- }
- List<VWarningLog> logList = et.net_warninglog.Where(whereQuery.Compile()).AsEnumerable().Select(n =>
- new VWarningLog
- {
- id = n.ID,
- warningName = n.WarningName,
- warningReason = n.WarningReason,
- deviceType = Enum.GetName(typeof(EnumDeviceType), n.DeviecType),
- warningSource = n.WarningSource,
- descr = n.Descr,
- warningTime = n.WarningTime.ToString("yyyy-MM-dd HH:mm:ss")
- }).OrderByDescending(x => x.warningTime).ToList();
- System.IO.StringWriter sw = new StringWriter();
- StringBuilder sbTitle = new StringBuilder();
- System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
- //定义模版(标题、内容字段、格式化参数)
- string[,] template = new string[,] {{ "终端编号,", "warningSource", "{0}"}, { "设备类型,", "deviceType", "{0}" }, { "报警原因,", "warningReason", "{0}"},
- { "报警信息,", "warningName", "{0}" }, { "描述", "descr", "{0}" }, { "报警时间", "warningTime", "{0}" } };
- string strLine = "";
- sw = new StringWriter();
- //获取模板的行数
- int colCount = template.GetLength();
- //表头
- for (int i = ; i < colCount; i++)
- {
- //在模板里面已经添加了逗号
- strLine += template[i, ];
- }
- strLine.Remove(strLine.Length - );
- sw.WriteLine(strLine);
- strLine = "";
- //表的内容
- for (int j = ; j < logList.Count; j++)
- {
- strLine = "";
- for (int k = ; k < colCount; k++)
- {
- if (k > && k < colCount)
- {
- strLine += ",";
- }
- string cell = "";
- string data = string.Format(template[k, ], logList[j].GetType().GetProperty(template[k, ]).GetValue(logList[j], null));
- if (string.IsNullOrEmpty(data))
- {
- strLine += "";
- }
- else
- {
- //前面加的单引号则是防止数字被转换成其它格式
- cell = "'" + data.Trim();
- }
- //防止里面含有特殊符号
- if (!string.IsNullOrEmpty(cell))
- {
- cell = cell.Replace("\"", "\"\"");
- cell = "\"" + cell + "\"";
- strLine += cell;
- }
- }
- sw.WriteLine(strLine);
- }
- string attachment = "attachment; filename=" + DateTime.Now.ToString("yyyy年MM月dd日HH点") + "网关报警日志.csv";
- Response.Clear();
- Response.ClearHeaders();
- Response.ClearContent();
- Response.AddHeader("content-disposition", attachment);
- Response.ContentType = "text/csv";
- Response.AddHeader("Pragma", "public");
- Response.Charset = "UTF-8";
- Response.ContentEncoding = System.Text.Encoding.UTF8;
- Response.HeaderEncoding = System.Text.Encoding.UTF8;
- //防止中文乱码(解决中文乱码问题)
- Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF });
- response.Write(sw.ToString());
- Response.End();
- sw.Close();
- }
- }
- catch (Exception ex)
- {
- _rsp.code = (int)EnumCode.程序异常;
- _rsp.msg = ex.Message;
- LogHelper.WriteLog(className, "Download", ex);
- }
- }
相关文章
- C#订阅与发布标准实现 visual studio code .net 开发 设计模式之☞策略模式 C#字符串转二进制、二进制转字符串 c# 接口的协变和逆变 c# 使用迭代器来创建可枚举类型 博客园首页新随笔联系订阅管理 随笔 - 117 文章 - 0 评论 - 57 c# 创建,加载,修改XML文档
- 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
- 请求大神,C#如何截取字符串中指定字符之间的部分 按指定字符串分割 一分为二 c# 去除字符串中的某个已知字符
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
- C# IL DASM 使用-破解c#软件方法
- C#,阿尔库因数(Alcuin Seqence)算法的源代码及数据可视化
- C# - 事物回滚
- C#-Hook钩子实例
- [C#] Direct2D 学习笔记 (一)vb.net转换为c#
- C#程序集系列13,如何让CLR选择不同版本的程序集
- 【转】.NET (C#) 中打印变量的内存地址
- C#有小数位数直接进位为整数;JavaScript Math有小数位数取整方法
- C#中使用微软语言包来获取中文汉字的拼音、拼音首字母、中文繁体
- 改善C#程序的建议2:C#中dynamic的正确用法
- 定义C#鼠标指针的形状 Cursor
- C#-IO-创建文件夹
- C#-ConfigurationManager类引用方法
- c#类的定义,c#中的关健字,C#标识符