Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C将SQL存储过程表转换为HTML#_C#_Sql_Xslt_Stored Procedures - Fatal编程技术网

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

C# 如何使用C将SQL存储过程表转换为HTML#,c#,sql,xslt,stored-procedures,C#,Sql,Xslt,Stored Procedures,我有一个大型存储过程,它返回5个不同的表。 我需要将存储过程生成的这些表显示为HTML 当我努力寻找问题的原因时,由于关闭类中的方法给出了看似无意义的错误消息;我正在寻找解决这个问题的新方法,但是欢迎所有的贡献 我继承了一个系统,该系统使用一种非常旧的方法通过IES.Core.ReportTool执行此操作。 我有一个XLST文件和一些c#来完成这项工作- string connStr = ConfigurationManager.AppSettings["DBConnStr"]

我有一个大型存储过程,它返回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();
        }
但有些地方不太正确,它抛出了一个空引用异常,如下所示-

System.NullReferenceException:对象引用未设置为对象的实例。在IES.Core.ReportTool.BaseGenerateHTMLFromSQL(字符串xslPathAndFileName、字符串xsdPathAndFileName、字符串xmlMapPathAndFileName、字符串XsltArgumentList xslArgs、字符串DBConnStr、SqlCommand sqlCommandObject、Boolean debug)在IES.Core.ReportTool.GenerateHTML(字符串xslPathAndFileName、字符串DBConnStr、SqlCommand sqlCommandObject、Boolean debug)在c:\Projects\brsweb\CMSWebParts\MyWebPart\ProgramDayDetail.ascx.cs中的ProgramDayDetail.Page\u加载(对象发送方,事件参数e):第37行

第37行是

lit.Text = rt.GenerateHTML(Server.MapPath("~/CMSPages/XSLT/ProgrammeDay.xslt"), connStr, cmd, false);
到目前为止我找到的解决方案(还没有完成,但它显示了从存储过程返回的数据)

string connStr=ConfigurationManager.AppSettings[“DBConnStr”];
SqlConnection=newsqlconnection(connStr);
connection.Open();
SqlCommand cmd=connection.CreateCommand();
cmd.CommandText=“Proc\u cisiv\u programmaydaydata”;
cmd.CommandType=CommandType.storedProcess;
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;
字符串mapPath=“”;
尝试
{
SqlDataAdapter da=新的SqlDataAdapter(cmd);
数据集ds=新数据集();
da.填充(ds);
lit.Text=ds.GetXml();
}
捕获(例外情况除外)
{
lit.Text=ex.ToString()+“

”+pInfo.NodeID+”

“+CMS.Membership.MembershipContext.AuthenticatedUser.UserID+”

“+mapPath; } connection.Close();
查看您的异常情况,我认为您向我们展示的代码不足以理解问题。 对
GenerateHTML
方法的调用以正确的方式启动。在该调用中,您调用
IES.Core.ReportTool.BaseGenerateHTMLFromSQL
,在那里您将得到
System.NullReferenceException

异常会一直传播到第37行,但不是正确的行号。

检查内部异常

那么第37行的哪个局部变量为空?(使用调试器。)我已经在本地进行了调试,connStr和cmd都已分配。就我所见,没有任何空的局部变量。到XSLT的映射是否为空
Server.MapPath(“~/CMSPages/XSLT/ProgrammeDay.XSLT”)
换句话说,尝试提取到局部变量的映射,看看该值是否为null。XSLT文件是否真的名为“ProgrammeDay.XSLT”,并且确实可以在该位置找到?根据您的描述,您似乎有一个工具可以将存储过程的结果转换为XML,然后对其应用XSLT以获得输出。要替换这一点,要么需要重新实现db结果到XML的转换,要么需要重新实现整个过程。两者都不可能是简单的。您可能会更好地了解该工具的来源,并查看是否可以从该方向获得一些帮助(如果您的解决方案中有源代码,则构建它以进行调试…)。GenerateHTML是ReportTool类中的一个封闭方法,因此我已向您提供了我能提供的所有代码,因此ReportTool类中存在错误。可能是输入中的参数错误导致的,但错误正在那里发生!
     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();