1

我想打印我的报告,但是当我设置 server = (IP)\SQLEXPRESS 总是无法登录时,在管理工作室工作正常。如果我设置 server = .\SQLEXPRESS 它正在工作。为什么我不能使用 ip 将报表连接到数据库?

public class PrintService : IPrintService
{
    readonly ReportDocument _reportDocument = new ReportDocument();

    private readonly string _reportPath = ConfigurationManager.AppSettings["ReportPath"];
    private readonly string _reportUser = ConfigurationManager.AppSettings["ReportUser"];
    private readonly string _reportPassword = ConfigurationManager.AppSettings["ReportPassword"];
    private readonly string _reportServer = ConfigurationManager.AppSettings["ReportServer"];
    private readonly string _reportDatabase = ConfigurationManager.AppSettings["ReportDatabase"];
    private readonly string _spbuNumber = ConfigurationManager.AppSettings["SPBUNumber"];
    private readonly string _spbuAddress = ConfigurationManager.AppSettings["SPBUAddress"];
    private readonly string _spbuPhone = ConfigurationManager.AppSettings["SPBUPhone"];

    public void Print(string number, string reportName)
    {
        var path = _reportPath + reportName;
        _reportDocument.Load(path);
        _reportDocument.SetDatabaseLogon(_reportUser, _reportPassword, _reportServer, _reportDatabase);
        _reportDocument.SetParameterValue("@Number", number);
        _reportDocument.SetParameterValue("@Location", _spbuNumber );
        _reportDocument.SetParameterValue("@Address", _spbuAddress);
        _reportDocument.SetParameterValue("@Phone", _spbuPhone);
        var print = new PrintDocument();
        _reportDocument.PrintOptions.PrinterName = print.PrinterSettings.PrinterName;
        _reportDocument.PrintOptions.PaperSize = (PaperSize) print.PrinterSettings.DefaultPageSettings.PaperSize.RawKind;
        _reportDocument.PrintToPrinter(1, false, 1, 1);
    }
}

谢谢 :)

4

2 回答 2

0

要在运行时加载报告,在客户端 PC 上,我需要找出连接字符串以找到客户端的本地服务器名称。我尝试了不同的方法来更改水晶报表表单登录连接,但只有这对我有用。这是最新的 13.0.9.1312.Cortez_CR4VS 版本,WPF 中包含 Windows 表单版本。在此代码中,prepap 是完整的 Crystal 报表名称,包括路径和 dbName,只是附加的 SQL 数据库的名称。csName 来自 app.config:添加名称的字符串。新连接保存在报告中。

ReportDocument doc = new ReportDocument();
String CS = (String)ConfigurationManager.ConnectionStrings[csName].ConnectionString;
doc.Load(prerap);
String DS = CS.Substring(12 + CS.IndexOf("data source"), CS.IndexOf("SQLEXPRESS") - CS.IndexOf("data source") - 2);
            if (doc.DataSourceConnections[0].ServerName != DS)
            {
                for(int i=0;i<doc.DataSourceConnections.Count;i++) 
                {
                    doc.DataSourceConnections[i].SetConnection(DS, dbName, true);               
                }

                doc.SaveAs(prerap);

            }
于 2014-07-19T11:12:56.430 回答
0

IS (IP) 是服务器名称或 ip 地址,id Ip 是服务器名称,然后删除括号。或者使用该服务器的直接 IP 地址。

于 2013-02-06T09:30:57.487 回答