我正在尝试为Live应用程序升级设置测试平台。为了不弄乱我的Live数据,我将数据库复制到另一个数据库。并使用“设置数据源位置”更新我的CR并指向新的数据库。但是,它们仍在从实时DB中加载记录!仅供参考我使用ODBC进行连接,并为测试平台创建了一个测试ODBC。
以前我的DC是“osso_odbc”,但我已将其更新为“ossotest”,但它仍在加载来自“osso_odbc”的记录。
任何人都知道出了什么问题以及我应该做些什么?
感谢。
答案 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)
最后我做的是删除所有现有连接并重新创建所有表单元素。现在它正在运作。