PCB MS SQL 标量函数(CLR) 实现DataTable转HTML的方法
一.准备需转为HMLT字符串的DataTable数据
在数据库中执行一段SQL返回的数据
需转换后的HTML的文本
<html ><head></head><body> <style> table,table tr th, table tr td { border:1px solid #0094ff;padding: 0px 10px } table { min-height: 25px; line-height: 25px; text-align: center; border-collapse: collapse;} th {background:green;color:white;} </style> <table><tr><th>TechName</th><th>ItemName</th><th>ItemPara</th></tr><tr><td>开料</td><td>综合利用率是否为最高</td><td>/</td></tr><tr><td>开料</td><td>综合利用率</td><td>68.36</td></tr><tr><td>开料</td><td>纬向余料</td><td>0</td></tr><tr><td>开料</td><td>经向余料</td><td>0</td></tr><tr><td>开料</td><td>是否为小交货面积拼板</td><td>n</td></tr><tr><td>开料</td><td>纬向尺寸</td><td>24</td></tr><tr><td>开料</td><td>是否为阴阳铜结构</td><td>N</td></tr><tr><td>开料</td><td>是否横竖开料</td><td>N</td></tr><tr><td>开料</td><td>生产尺寸长</td><td>24</td></tr><tr><td>开料</td><td>生产尺寸宽</td><td>18</td></tr><tr><td>开料</td><td>拼板利用率</td><td>68.36</td></tr><tr><td>开料</td><td>开料图纸</td><td>/</td></tr><tr><td>开料</td><td>是否顾客指定板材</td><td>N</td></tr><tr><td>开料</td><td>开料数</td><td>4</td></tr><tr><td>开料</td><td>大料经向尺寸</td><td>36</td></tr><tr><td>开料</td><td>大料纬向尺寸</td><td>48</td></tr><tr><td>开料</td><td>成品尺寸长</td><td>12</td></tr><tr><td>开料</td><td>成品尺寸宽</td><td>13.5</td></tr><tr><td>开料</td><td>是否为PTFE板材</td><td>N</td></tr><tr><td>开料</td><td>交货拼板个数</td><td>1</td></tr><tr><td>开料</td><td>生产拼板个数</td><td>1176</td></tr><tr><td>开料</td><td>交货单位</td><td>U</td></tr><tr><td>开料</td><td>是否为凹蚀板材</td><td>N</td></tr></table></body></html>
二.C#写SQL SERVER(CLR)转HTML函数
先执行SQL返回DataTable,接着再将DataTable转为HTML
![](/assets/blank.gif)
![](/assets/blank.gif)
/// <summary> /// SQL转Html/// </summary> /// <param name="StrSQL">SQL语句</param> /// <param name="isTable">是否只转Table标签</param> /// <returns></returns> [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]public static string ExecSQL2Html(string StrSQL, bool isTable){DataTable dt = getDataTable(StrSQL);return DataTable2Html(dt, isTable);}/// <summary>/// 执行SQL获取DataTable/// </summary>/// <param name="StrSQL"></param>/// <returns></returns>private static DataTable getDataTable(string StrSQL){DataTable dt = new DataTable();try{using (SqlConnection cn = new SqlConnection("context connection=true")){using (SqlDataAdapter da = new SqlDataAdapter(StrSQL, cn)){DataSet ds = new DataSet();da.Fill(ds, "tab");dt = ds.Tables["tab"];}}}catch (Exception ex){throw;}return dt;}/// <summary>/// 将DataTable转为HTML/// </summary>/// <param name="dt"></param>/// <returns></returns>private static string DataTable2Html(DataTable dt, bool isTable = false){StringBuilder strHTMLBuilder = new StringBuilder();if (!isTable){strHTMLBuilder.Append("<html >");strHTMLBuilder.Append("<head>");strHTMLBuilder.Append("</head>");strHTMLBuilder.Append("<body>");string style = @" <style>table,table tr th, table tr td { border:1px solid #0094ff;padding: 0px 10px }table { min-height: 25px; line-height: 25px; text-align: center; border-collapse: collapse;} th {background:green;color:white;}</style> ";strHTMLBuilder.Append(style);}strHTMLBuilder.Append("<table>");strHTMLBuilder.Append("<tr>");foreach (DataColumn myColumn in dt.Columns){strHTMLBuilder.Append("<th>");strHTMLBuilder.Append(myColumn.ColumnName);strHTMLBuilder.Append("</th>");}strHTMLBuilder.Append("</tr>");foreach (DataRow myRow in dt.Rows){strHTMLBuilder.Append("<tr>");foreach (DataColumn myColumn in dt.Columns){strHTMLBuilder.Append("<td>");strHTMLBuilder.Append(myRow[myColumn.ColumnName].ToString());strHTMLBuilder.Append("</td>");}strHTMLBuilder.Append("</tr>");}strHTMLBuilder.Append("</table>");if (!isTable){strHTMLBuilder.Append("</body>");strHTMLBuilder.Append("</html>");}return strHTMLBuilder.ToString();}
View Code
三.SQL服务器CLR配置(允许SQL调用.net程序)
sp_configure 'show advanced options', 1; RECONFIGURE WITH overrideGO sp_configure 'clr enabled', 1; RECONFIGURE WITH overrideGOSp_changedbowner 'sa',true --sa改为当前登入用户名alter database [dbname] set trustworthy on --bbname 改为自己的库名
四.注册 CLR 程序集
create ASSEMBLY SQLfunctionAssembly FROM 'D:\SQLClr.dll' --改为自己C#写的dll路径填写WITH PERMISSION_SET = UNSAFE;
创建的.net程序集数据会写入下表:
select * from sys.assemblies select * from sys.assembly_files
五.创建标量函数
CREATE FUNCTION [dbo].[ExecSQL2Html](@StrSQL [nvarchar](max), @isTable [bit]) RETURNS [nvarchar](max) WITH EXECUTE AS CALLER AS EXTERNAL NAME [SQLfunctionAssembly].[SQLClr.SQLfunction].[ExecSQL2Html]
六.测试DataTable转HTML函数
执行ExecSQL2HTML函数代码
DECLARE @SQL VARCHAR(MAX) SET @SQL = 'SELECT TechName,ItemName,ItemPara FROM FP_EMS_DB.dbo.V_ppegeneral WHERE pdctno = ''2V011Z30A4'' AND TechNo = ''CC_01'' ORDER BY ItemNo ' SELECT dbo.ExecSQL2HTML(@SQL,0)
运行后结果返回为HTML文本
<html ><head></head><body> <style> table,table tr th, table tr td { border:1px solid #0094ff;padding: 0px 10px } table { min-height: 25px; line-height: 25px; text-align: center; border-collapse: collapse;} th {background:green;color:white;} </style> <table><tr><th>TechName</th><th>ItemName</th><th>ItemPara</th></tr><tr><td>开料</td><td>综合利用率是否为最高</td><td>/</td></tr><tr><td>开料</td><td>综合利用率</td><td>68.36</td></tr><tr><td>开料</td><td>纬向余料</td><td>0</td></tr><tr><td>开料</td><td>经向余料</td><td>0</td></tr><tr><td>开料</td><td>是否为小交货面积拼板</td><td>n</td></tr><tr><td>开料</td><td>纬向尺寸</td><td>24</td></tr><tr><td>开料</td><td>是否为阴阳铜结构</td><td>N</td></tr><tr><td>开料</td><td>是否横竖开料</td><td>N</td></tr><tr><td>开料</td><td>生产尺寸长</td><td>24</td></tr><tr><td>开料</td><td>生产尺寸宽</td><td>18</td></tr><tr><td>开料</td><td>拼板利用率</td><td>68.36</td></tr><tr><td>开料</td><td>开料图纸</td><td>/</td></tr><tr><td>开料</td><td>是否顾客指定板材</td><td>N</td></tr><tr><td>开料</td><td>开料数</td><td>4</td></tr><tr><td>开料</td><td>大料经向尺寸</td><td>36</td></tr><tr><td>开料</td><td>大料纬向尺寸</td><td>48</td></tr><tr><td>开料</td><td>成品尺寸长</td><td>12</td></tr><tr><td>开料</td><td>成品尺寸宽</td><td>13.5</td></tr><tr><td>开料</td><td>是否为PTFE板材</td><td>N</td></tr><tr><td>开料</td><td>交货拼板个数</td><td>1</td></tr><tr><td>开料</td><td>生产拼板个数</td><td>1176</td></tr><tr><td>开料</td><td>交货单位</td><td>U</td></tr><tr><td>开料</td><td>是否为凹蚀板材</td><td>N</td></tr></table></body></html>
HTML文本用浏览器打开效果
注:此转换转为HTML应用场景会后续文章会讲到的,利用SQL SERVER 2008数据库发送邮件功能实现PCB 自动发送光绘贴片,将邮件中内容表格数据需转为HTML格式有应用到。
转载于:https://www.cnblogs.com/pcbren/p/10125795.html
PCB MS SQL 标量函数(CLR) 实现DataTable转HTML的方法相关推荐
- MS SQL自定义函数IsPositiveInteger MS SQL自定义函数IsNumeric 水晶报表使用IEnumerableT数据源...
MS SQL自定义函数IsPositiveInteger 判断字符串是否为正整数,0开始的的数字不算. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ...
- 【转载】SQL 标量函数-----字符串函数 之二 去空格函数 LTRIM() 、RTRIM()
在用ADO.NET时有时会遇到查询不到数据的状况,即使列属性设置为VARCHAR(N),也不能有效避免前后空格,所以要对查询数据做一定处理 去空格函数 1.LTRIM() 把字符串头部的空格去掉. 2 ...
- MS SQL 数据库出现损坏(可疑)的修复方法
当数据库出现这种情况的时候,说明数据库已经出现损坏,需要对数据库进行修复处理: 1.打开数据库管理器SQL server Management Studio,将当前数据库实例服务停止: 然后找到需要修 ...
- MS SQL Server数据库修复利器—D-Recovery For MS SQL Server数据恢复软件
微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MD ...
- SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题
SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题 原文:SQL SERVER中用户定义标量函数(scalar user defined fu ...
- mysql标量函数,SQL Server标量函数
在本教程中,将了解SQL Server标量函数以及如何使用它们来封装公式或业务逻辑,并在查询中重用它们. 标量函数是什么 SQL Server标量函数接受一个或多个参数并返回单个值. 标量函数可帮助简 ...
- matlab没有定义标量,SQL创建了标量函数但显示不存在,如何解决
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:SQL创建了标量函数但显示不存在,如何解决?回答:使用修改部分打开的自定义函数,说明函数创建成功.至于加红色的波浪线,可以不用理会, ...
- MS SQL Server2012中的EOMONTH函数
MS SQL Server2012中的EOMONTH函数 这个函数是获取一个指定日期所在月份最后一天的日期.可以得到某一个月月份的最后一天 如: declare @orderdate date='20 ...
- EntityFramework Core 2.0自定义标量函数两种方式
前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...
最新文章
- python modbus tk 库_如何使用modbus tk rtu(python)设置简单的从机和主机
- asp.net发布网站(转)
- C#:多线程使用TextBox控件
- P3899 [湖南集训]更为厉害(线段树合并、长链剖分、二维数点)
- 分布式系统架构常识:CAP理论
- 1.NoSQL与MongoDB简介
- 推荐一个在线全自动智能图片背景扣除工具,效果杠杠的
- 在idea上配置hadoop开发环境,使用maven配置hadoop的依赖,自动管理相关jar包
- Git服务器-Gogs搭建
- arXiv引用格式转换为已发表会议标准引用格式小工具分享
- 网上购物系统功能业务逻辑导图_功能流程说明_OctShop
- gulp-livereload组件使用
- PostGIS几何图形操作
- 使用Git初始化已有的项目
- 一图读懂IP数据包头结构
- UVa 10827 - Maximum sum on a torus
- 软件定制开发怎么收费
- qq浏览器网站禁止访问怎么办 qq浏览器网站禁止访问如何解决
- MSRA提出通用文档预训练模型LayoutLM,通往文档智能之路!
- 高中数学联赛不等式专题:题目1
热门文章
- AT24C02的使用说明和完整代码-51单片机
- 多管齐下,解决dotNet FrameWork全角问题
- s9014 c331
- 《用Python编程来做数学题|CSDN创作打卡》
- UVa 1366 - Martian Mining (dp)
- cesium开发淹没分析_淹没在Web开发行业的工具中
- Skype消息服务器,Win10通用版《消息+Skype视频》服务:现在正式登陆中国地区
- 1月16日:拉格朗日中值定理,罗尔定理,柯西中值,拉格朗日插值,牛顿插值,重心插值,拉格朗日乘子法的证明
- JVM学习笔记(自用)
- FileNotFoundError: [Errno 2] No such file or directory: stu. txt '