一.准备需转为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

        /// <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的方法相关推荐

  1. MS SQL自定义函数IsPositiveInteger MS SQL自定义函数IsNumeric 水晶报表使用IEnumerableT数据源...

    MS SQL自定义函数IsPositiveInteger 判断字符串是否为正整数,0开始的的数字不算. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ...

  2. 【转载】SQL 标量函数-----字符串函数 之二 去空格函数 LTRIM() 、RTRIM()

    在用ADO.NET时有时会遇到查询不到数据的状况,即使列属性设置为VARCHAR(N),也不能有效避免前后空格,所以要对查询数据做一定处理 去空格函数 1.LTRIM() 把字符串头部的空格去掉. 2 ...

  3. MS SQL 数据库出现损坏(可疑)的修复方法

    当数据库出现这种情况的时候,说明数据库已经出现损坏,需要对数据库进行修复处理: 1.打开数据库管理器SQL server Management Studio,将当前数据库实例服务停止: 然后找到需要修 ...

  4. MS SQL Server数据库修复利器—D-Recovery For MS SQL Server数据恢复软件

    微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MD ...

  5. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题 原文:SQL SERVER中用户定义标量函数(scalar user defined fu ...

  6. mysql标量函数,SQL Server标量函数

    在本教程中,将了解SQL Server标量函数以及如何使用它们来封装公式或业务逻辑,并在查询中重用它们. 标量函数是什么 SQL Server标量函数接受一个或多个参数并返回单个值. 标量函数可帮助简 ...

  7. matlab没有定义标量,SQL创建了标量函数但显示不存在,如何解决

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:SQL创建了标量函数但显示不存在,如何解决?回答:使用修改部分打开的自定义函数,说明函数创建成功.至于加红色的波浪线,可以不用理会, ...

  8. MS SQL Server2012中的EOMONTH函数

    MS SQL Server2012中的EOMONTH函数 这个函数是获取一个指定日期所在月份最后一天的日期.可以得到某一个月月份的最后一天 如: declare @orderdate date='20 ...

  9. EntityFramework Core 2.0自定义标量函数两种方式

    前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...

最新文章

  1. python modbus tk 库_如何使用modbus tk rtu(python)设置简单的从机和主机
  2. asp.net发布网站(转)
  3. C#:多线程使用TextBox控件
  4. P3899 [湖南集训]更为厉害(线段树合并、长链剖分、二维数点)
  5. 分布式系统架构常识:CAP理论
  6. 1.NoSQL与MongoDB简介
  7. 推荐一个在线全自动智能图片背景扣除工具,效果杠杠的
  8. 在idea上配置hadoop开发环境,使用maven配置hadoop的依赖,自动管理相关jar包
  9. Git服务器-Gogs搭建
  10. arXiv引用格式转换为已发表会议标准引用格式小工具分享
  11. 网上购物系统功能业务逻辑导图_功能流程说明_OctShop
  12. gulp-livereload组件使用
  13. PostGIS几何图形操作
  14. 使用Git初始化已有的项目
  15. 一图读懂IP数据包头结构
  16. UVa 10827 - Maximum sum on a torus
  17. 软件定制开发怎么收费
  18. qq浏览器网站禁止访问怎么办 qq浏览器网站禁止访问如何解决
  19. MSRA提出通用文档预训练模型LayoutLM,通往文档智能之路!
  20. 高中数学联赛不等式专题:题目1

热门文章

  1. AT24C02的使用说明和完整代码-51单片机
  2. 多管齐下,解决dotNet FrameWork全角问题
  3. s9014 c331
  4. 《用Python编程来做数学题|CSDN创作打卡》
  5. UVa 1366 - Martian Mining (dp)
  6. cesium开发淹没分析_淹没在Web开发行业的工具中
  7. Skype消息服务器,Win10通用版《消息+Skype视频》服务:现在正式登陆中国地区
  8. 1月16日:拉格朗日中值定理,罗尔定理,柯西中值,拉格朗日插值,牛顿插值,重心插值,拉格朗日乘子法的证明
  9. JVM学习笔记(自用)
  10. FileNotFoundError: [Errno 2] No such file or directory: stu. txt '