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
/// <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();
}
三.SQL服务器CLR配置(允许SQL调用.net程序)
sp_configure 'show advanced options', 1;
RECONFIGURE WITH override
GO
sp_configure 'clr enabled', 1;
RECONFIGURE WITH override
GO
Sp_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格式有应用到。
PCB MS SQL 标量函数(CLR) 实现DataTable转HTML的方法的更多相关文章
- PCB MS SQL 标量函数(CLR) 实现DataTable转Json方法
一.准备需转为json字符串的DataTable数据 在数据库中执行一段SQL返回的数据 需转换后的JSON字符串的效果 [{"TechName":"开料",& ...
- PCB MS SQL 标量函数(CLR) 实现Socket发送消息
在PCB业务系统中,数据库中的数据总是被应用端主动连接数据库并操作数据,是否想过可以让数据库主动的将数据推送出去呢! 答应其实是可以的.比如有这样的应用场景! 当SQL SERVER数据库满足某个条件 ...
- PCB MS SQL 标量函数与表值函数(CLR) 实现文件与目录操作
一.C#写SQL SERVER(CLR)实现文件操作 标量函数: 文件移动 ,复制,检测文件存在,写入新文件文本,读取文本,创建目录,删除目录,检测目录是否存在 /// <summary> ...
- PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)
将字符串分割为表表经常用到,这里 SQL表值函数与CLR 表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5 ...
- SQL标量函数
调用 MS SQL 标量值函数,应该在函数前面加上 "dbo.",否则会报 “不是可以识别的 内置函数名称”错误.例如 DECLARE @WhichDB TINYINT; ...
- MS SQL自定义函数IsPositiveInteger MS SQL自定义函数IsNumeric 水晶报表使用IEnumerable<T>数据源
MS SQL自定义函数IsPositiveInteger 判断字符串是否为正整数,0开始的的数字不算. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON ...
- PCB MS SQL 排序应用---SQL相邻数据区间值求解
其中一篇 博文中有写<PCB MS SQL 排序应用---相邻数据且相同合并处理>此篇有也应相用也同的技巧,实现相邻数据区间值求解 示例: 原数据:处理前 求出区间值:处理后 SQL 代码 ...
- PCB MS SQL CLR聚合函数(函数作用,调用顺序,调用次数) CLR说明
用CLR写函数:标量函数,表值函数 很好理解,如果用聚合函数则不是那么好理解了, 这里将CLR函数说明一下,其实关键是对聚合函数说明 用CLR写聚合函数关键点,是要理解CLR与SQL是如何进行数据交互 ...
- sql标量函数与表值函数
标量函数 ),)) returns int as begin return (select UserID from UserInfo where UserName=@UserName and User ...
随机推荐
- Spring资源访问接口Resource
该接口拥有对不同资源类型的实现类 boolean exists() 资源是否存在 boolean isOpen() 资源是否打开 URL getURL() 如果底层资源可以表示成URL,则该方法返回对 ...
- MyBatis 的基本要素—核心配置文件
MyBatis 核心配置文件( mybatis-config.xml),该文件配置了 MyBatis 的一些全局信息,包含数据库连接信息和 MyBatis 运行时所需的各种特性,以及设置和影响 MyB ...
- Python学习——集合
集合 python中的集合和数学上集合具有基本相同的性质,此处不再赘述. 1.创建集合的两种方法 #直接创建 num={1,2,3,4,5} #利用set方法创建 num1=set([1,2,3,4, ...
- BZOJ 1012 洛谷1198 最大数 maxnumber
用线段数维护即可 #include<cstdio> #include<algorithm> #define ls (cur<<1) #define rs (cur& ...
- Python基础(八)装饰器
今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...
- Spring SpEL 各种写法示例
项目路径 先说一下三个bean都有哪些属性 Address.java private String city;//城市 private String street;//街道 Car.java priv ...
- Spring MVC_Hello World
[Hello World] 步骤: (1)加入jar包, (2)在web.xml中配置DispatcherServlet, (3)加入Spring MVC的配置文件, (4)编写处理请求的处理器,并标 ...
- [luoguP2858] [USACO06FEB]奶牛零食Treats for the Cows(DP)
传送门 f[i][j][k] 表示 左右两段取到 i .... j 时,取 k 次的最优解 可以优化 k 其实等于 n - j + i 则 f[i][j] = max(f[i + 1][j] + a[ ...
- Crashing Robots POJ 2632 简单模拟
Description In a modernized warehouse, robots are used to fetch the goods. Careful planning is neede ...
- codevs——1462 素数和
1462 素数和 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 给定2个整数a,b 求出它们之间(不含a ...