从Web.config VS2008 Crystal Reports数据库连接

时间:2012-05-12 01:20:07

标签: asp.net crystal-reports web-config database-connection

我正在开发一个ASP.NET应用程序。这是一份CR报告。当我第一次编写报告时,我将其硬编码指向我的开发服务器(使用带有Windows集成登录的MSSQL)。因此,当我将我的应用程序移动到生产服务器时,它当然失败了。 我一直在寻找如何将它连接到Web.config中列出的数据库的答案,但没有任何运气。

我看到一个建议,即我在项目中创建了一个数据集并与之相关,但现在我似乎无法使用参数来过滤记录。 我确实看到了另外一个关于如何动态更改数据库源的建议,但这是为那些想要在中间会话中更改数据库的人设计的,而不是依赖于机器,并且看起来有点过分。

有没有人有一个很好的简单解决方案?我一直在研究这个问题太长时间了,觉得我要拍电脑了(这会教给你一个教训)。 : - (

1 个答案:

答案 0 :(得分:2)

public static class ReportDocumentExtensions
{
    public static void SetConnectionInfo(this ReportDocument report, ReportContextArgs context)
    {
        SetConnectionInfo(report, context.UserId, context.Password, context.ServerName, context.DatabaseName);
    }

    public static void SetConnectionInfo(this ReportDocument report, string userId, string password, string serverName, string databaseName)
    {
        foreach (Table oTable in report.Database.Tables)
        {
            TableLogOnInfo oInfo = oTable.LogOnInfo;

            ConnectionInfo oConnection = oTable.LogOnInfo.ConnectionInfo;

            oConnection.UserID = userId;
            oConnection.Password = password;
            oConnection.ServerName = serverName;
            oConnection.DatabaseName = databaseName;

            oTable.ApplyLogOnInfo(oInfo);
        }
    }
}

public class ReportContextArgs
{

    private string _userId;
    private string _password;
    private string _serverName;
    private string _databaseName;

    public string ServerName
    {
        get { return _serverName; }
        set { _serverName = value; }
    }

    public string UserId
    {
        get { return _userId; }
        set { _userId = value; }
    }

    public string Password
    {
        get { return _password; }
        set { _password = value; }
    }

    public string DatabaseName
    {
        get { return _databaseName; }
        set { _databaseName = value; }
    }
}