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