直接在数据库中修改SSRS不会反映在ReportViewer中

时间:2015-04-29 11:29:00

标签: c# reporting-services ssrs-2008-r2 rdl dynamic-rdlc-generation

我正在开发基于Web的SSRS编辑器。我成功开发了一个Parser,它从Database中的CATALOG Table访问SSRS模式并将其转换为HTML。

从此处用户可以修改报告并提交更改,Parser再次接收HTML并将其转换为Desire结果。

但是当我在ReportViewer中访问该报告时,它仍显示旧报告。

当我从报告管理网址下载报告时,它显示了我从应用程序所做的更改。

我怀疑微软是否也以物理格式存储RDL。

请帮助..

1 个答案:

答案 0 :(得分:0)

最后我得到了解决方案。在我直接更新目录表中的内容列之前,虽然更改了数据库中的更改,但它没有反映实际的实时报告。

经过一番搜索,我找到了 this 。如何通过代码部署报告并完成。

class Sample {
static void Main(string[] args)
{
    ReportingService2010 rs = new ReportingService2010();
    rs.Url = "http://<Server Name>" +
        "/_vti_bin/ReportServer/ReportService2010.asmx";
    rs.Credentials = 
        System.Net.CredentialCache.DefaultCredentials;

    Byte[] definition = null;
    Warning[] warnings = null;
    string name = "MyReport.rdl";

    try
    {
        FileStream stream = File.OpenRead("MyReport.rdl");
        definition = new Byte[stream.Length];
        stream.Read(definition, 0, (int)stream.Length);
        stream.Close();
    }
    catch (IOException e)
    {
        Console.WriteLine(e.Message);
    }

    try
    {
        string parent = "http://<Server Name>/Docs/Documents/";
        CatalogItem report = rs.CreateCatalogItem("Report", name, parent,
                    false, definition, null, out warnings);

        if (warnings != null)
        {
            foreach (Warning warning in warnings)
            {
                Console.WriteLine(warning.Message);
            }
        }

        else
            Console.WriteLine("Report: {0} created successfully " +
                              " with no warnings", name);
    }
    catch (SoapException e)
    {
        Console.WriteLine(e.Detail.InnerXml.ToString());
    }
} }