ASP.NET Crystal Report更改"设置数据源位置"不管用

时间:2015-03-18 08:52:32

标签: c# asp.net crystal-reports

我正在尝试为Live应用程序升级设置测试平台。为了不弄乱我的Live数据,我将数据库复制到另一个数据库。并使用“设置数据源位置”更新我的CR并指向新的数据库。但是,它们仍在从实时DB中加载记录!仅供参考我使用ODBC进行连接,并为测试平台创建了一个测试ODBC。

enter image description here 以前我的DC是“osso_odbc”,但我已将其更新为“ossotest”,但它仍在加载来自“osso_odbc”的记录。

任何人都知道出了什么问题以及我应该做些什么?

感谢。

2 个答案:

答案 0 :(得分:0)

1 - 如果选中“在报告中保存数据”,则仍可以提示旧数据 2 - 如果您有子报告,则必须为子报告“设置数据源位置” 3 - “设置数据源位置”不是太直观了,你使用了righr程序
4 - 我们正在讨论在设计时更改数据源,而不是在asp.net runitme中,是吗?


我使用以下代码以编程方式更改连接,基于connectionsting并根据Querystring将参数传递给报表。

 bool Logon(ReportDocument cr, string server, string db, bool integratedSecurity, string id, string pass)
{
    ConnectionInfo ci = new ConnectionInfo();
    SubreportObject subObj;

    ci.ServerName = server;
    ci.DatabaseName = db;
    if (integratedSecurity)
        ci.IntegratedSecurity = true;
    else
    {
        ci.IntegratedSecurity = false;
        ci.UserID = id;
        ci.Password = pass;
    }
    PassParameters();
    if (!ApplyLogon(cr, ci))
        return false;

    for (int i = 0; i < cr.ReportDefinition.ReportObjects.Count; i++)
        if (cr.ReportDefinition.ReportObjects[i].Kind == ReportObjectKind.SubreportObject)
        {
            subObj = (SubreportObject)cr.ReportDefinition.ReportObjects[i];
            if (!ApplyLogon(cr.OpenSubreport(subObj.SubreportName), ci))
                return false;
        }
    return true;
}


 bool ApplyLogon(ReportDocument cr, ConnectionInfo ci)
{

    TableLogOnInfo li;
    // for each table apply connection info
    for (int i = 0; i < cr.Database.Tables.Count; i++)
    {

        li = cr.Database.Tables[i].LogOnInfo;
        li.ConnectionInfo = ci;
        cr.Database.Tables[i].ApplyLogOnInfo(li);

        // check if logon was successful
        // if TestConnectivity returns false, check
        // logon credentials
        if (TestConnectivity(cr, i))
        {
            // drop fully qualified table location
            if (cr.Database.Tables[i].Location.IndexOf(".") > 0)
                cr.Database.Tables[i].Location = cr.Database.Tables[i].Location.Substring(cr.Database.Tables[i].Location.LastIndexOf(".") + 1);

     cr.Database.Tables[i].Location.Substring(cr.Database.Tables[i].Location.LastIndexOf(".") + 1);

        }

        else return false;
    }
    return true;
   }




 private static bool TestConnectivity(ReportDocument cr, int i)
{
    bool test = false;
    try { test = cr.Database.Tables[i].TestConnectivity(); }
    catch (System.Runtime.InteropServices.COMException)
    {
        try { test = cr.Database.Tables[i].TestConnectivity(); }
        catch (System.Runtime.InteropServices.COMException)
        {
            try { test = cr.Database.Tables[i].TestConnectivity(); }
            catch (System.Runtime.InteropServices.COMException)
            { test = cr.Database.Tables[i].TestConnectivity(); }
        }
    }

    return test;
   }


  private void PassParameters()
{
    // char[] subReportPrefix = new char[] { 'P', 'm', '-', '?' };
    foreach (ParameterField field in reportDocument.ParameterFields)
    {
        string fieldName = field.Name.TrimStart('@');//.TrimStart(subReportPrefix);
        ParameterValues p = new ParameterValues();
        string valu = clearQueryString[fieldName];//cerco in querystring
        if (!string.IsNullOrEmpty(valu))//se ho trovato in querystring ok
        {
            string[] valus = valu.Split('§');//se c'è il separatore sono values sennò è value
            if (valus.Length > 1)
            {
                foreach (string v in valus)
                    if (p.Count == 0 || !string.IsNullOrEmpty(v))
                        p.AddValue(v);
            }
            else
                p.AddValue(valu);
            field.CurrentValues = p;
        }
     ......

答案 1 :(得分:0)

最后我做的是删除所有现有连接并重新创建所有表单元素。现在它正在运作。