• 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();
            }
    View Code

    三.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格式有应用到。

  • 相关阅读:
    前端开发者也可以酷酷地开发桌面程序
    V部落,V人事
    jq 正方体旋转
    jq 实现旋转木马
    jquery 获取元素(父节点,子节点,兄弟节点)
    Vue.js面试题整理
    Java面试必备技能
    在前后端分离的SpringBoot项目中集成Shiro权限框架
    正则表达式大全
    Docker容器日志查看与清理
  • 原文地址:https://www.cnblogs.com/pcbren/p/10125795.html
Copyright © 2020-2023  润新知