c# - 如何使用 C# 将 SQL 存储过程表转换为 HTML

标签 c# sql xslt stored-procedures

我有一个返回 5 个不同表的大型存储过程。 我需要将存储过程生成的这些表显示为 HTML。

由于封闭类中的方法给出看似毫无意义的错误消息,我正在努力寻找问题所在;我正在寻找问题的新解决方案,但欢迎所有贡献

我继承了一个系统,该系统使用非常古老的方法通过 IES.Core.ReportTool 执行此操作。 我有一个 XLST 文件和一些 c# 来执行此操作 -

        string connStr = ConfigurationManager.AppSettings["DBConnStr"];

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "Proc_cisiv_ProgramDayData";
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@ProgramDayNodeID", SqlDbType.Int);
        cmd.Parameters.Add("@UserID", SqlDbType.Int);

        PageInfo pInfo = CMS.DocumentEngine.DocumentContext.CurrentPageInfo;
        cmd.Parameters["@ProgramDayNodeID"].Value = pInfo.NodeID;
        cmd.Parameters["@UserID"].Value = CMS.Membership.MembershipContext.AuthenticatedUser.UserID;
        ReportTool rt = new ReportTool();

        try
        {
            lit.Text = rt.GenerateHTML(Server.MapPath("~/CMSPages/XSLT/ProgrammeDay.xslt"), connStr, cmd, false);
        }
        catch (Exception ex)
        {
            lit.Text = ex.ToString();
        }

但是有些地方不太对,它抛出了一个 Null Reference Exception,如下所示 -

System.NullReferenceException: Object reference not set to an instance of an object. at IES.Core.ReportTool.BaseGenerateHTMLFromSQL(String xslPathAndFileName, String xsdPathAndFileName, String xmlMapPathAndFileName, XsltArgumentList xslArgs, String DBConnStr, SqlCommand sqlCommandObject, Boolean debug) at IES.Core.ReportTool.GenerateHTML(String xslPathAndFileName, String DBconnStr, SqlCommand sqlCommandObject, Boolean debug) at ProgramDayDetail.Page_Load(Object sender, EventArgs e) in c:\Projects\brsweb\CMSWebParts\MyWebPart\ProgramDayDetail.ascx.cs:line 37

第37行是

lit.Text = rt.GenerateHTML(Server.MapPath("~/CMSPages/XSLT/ProgrammeDay.xslt"), connStr, cmd, false);

目前我找到的解决方案(还没有完全完成,但它显示了从存储过程返回的数据,这是应该的)

     string connStr = ConfigurationManager.AppSettings["DBConnStr"];

        SqlConnection connection = new SqlConnection(connStr);
        connection.Open();

        SqlCommand cmd = connection.CreateCommand();
        cmd.CommandText = "Proc_cisiv_ProgramDayData";
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("@ProgramDayNodeID", SqlDbType.Int);
        cmd.Parameters.Add("@UserID", SqlDbType.Int);

        PageInfo pInfo = CMS.DocumentEngine.DocumentContext.CurrentPageInfo;

        cmd.Parameters["@ProgramDayNodeID"].Value = pInfo.NodeID;
        cmd.Parameters["@UserID"].Value = CMS.Membership.MembershipContext.AuthenticatedUser.UserID;

        string mapPath = "";
        try
        {
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            lit.Text = ds.GetXml();
        }
        catch (Exception ex)
        {
            lit.Text = ex.ToString() + "</br></br>" + pInfo.NodeID + "</br></br>" + CMS.Membership.MembershipContext.AuthenticatedUser.UserID + "</br></br>" + mapPath;
        }

    connection.Close();

最佳答案

查看您的异常,我认为您向我们展示的代码不足以理解问题。 GenerateHTML 方法的调用以正确的方式开始。在该调用中,您调用了 IES.Core.ReportTool.BaseGenerateHTMLFromSQL 并在那里得到了 System.NullReferenceException

异常传播到 第 37 行 但不是正确的行号。
检查内部异常

关于c# - 如何使用 C# 将 SQL 存储过程表转换为 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27783071/

相关文章:

MySQL - 为每个重复值获取一个计数器

mysql - django:自动将行插入数据库

c# - 更新 XSLT 以合并模板调用

xslt - 从输出 xml 中删除空的 xmlns 命名空间

javascript - 如何在每个动态创建的 ImageButton 周围包裹一个超链接? Visual Studio

c# - 从 NHibernate session 断开对象

sql - 如何在 IntelliJ 中设置 sql 方言

c# - C# 中负货币数字的全局变化格式

c# - 无法插入数据库

xslt - 使用 XSLT 将 XHTML 文件递归合并为一个 XHTML 文件