AR关于后台实现动态数据源切换的方案
目前我们用的是ar11版本,基于H5展示报表现在的场景是这样的:
我在IIS部署了一个ar server站点,绑定了N多个域名(比如:a.ar.website.com 和 b.ar.website.com 以及 c.ar.website.com)
并添加了一个配置文件 config.properties 文件,文件内容是
a.website.com.datatype=mysql
a.website.com.serverip=192.168.1.1
a.website.com.user=sa
a.website.com.pwd=saa
b.website.com.datatype=postgresql
b.website.com.serverip=192.168.1.2
b.website.com.user=sa
b.website.com.pwd=sab
c.website.com.datatype=mysql
c.website.com.serverip=192.168.1.3
c.website.com.user=sa
c.website.com.pwd=sac
当a.website.com 请求 a.ar.website.com 的时候,我会读取a站点的配置,得到数据库连接的IP和账号密码进行数据查询
b.website.com ->b.ar.website.com
c.website.com ->c.ar.website.com
同理a
现在我所有的sql都是写在程序的业务逻辑中,我现在要将所有的sql逻辑写到报表文件中,
那么报表设计器中如何动态的设置报表数据源的类型?
和动态的设置连库的字符串?
您好,这个你可以参考这个博客,后端通过代码进行数据源的修改:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=51307&extra=page%3D6
你使用的是H5的方式进行报表的加载,那么你这个方法需要写到对应的报表服务的方法中,进行数据源的修改 写这里
public class ReportWebService : GrapeCity.ActiveReports.Web.ReportService 我电话不是给你说了,自己默认的服务是没办法写写这个方法的,需要自己新建一个新的报表服务,在这个报表服务的.cs文件下进行数据源的代码修改 按照这个配置
https://www.grapecity.com.cn/blogs/activereportsmysql
提示“当前建松模式信息时error;odbc驱动管理器未发现数据源名称并且未指定默认驱动程序”数据提供器引发异常,我安装的是
mysql-connector-odbc-8.0.17-winx64.msi
连接字符串为:
Driver={MySQL ODBC 8.0.17 UNICODE Driver};Server=IP;Port=3306;Database=dba;User=root;Password=123456;Option=3; 这个问题就是说没,你后端代码写的方法有问题。你把你的后端代码的写法发过来我看看。 我现在就是新建个报表,里边直接连msql8就报错,提示找不到驱动;
我现在web服务代码如下
public class ReportWebService : GrapeCity.ActiveReports.Web.ReportService
{
PageReport pageReport;
PageDocument _pageDocument;
string domainName;
protected override object OnCreateReportHandler(string reportPath)
{
try
{
if (AppTools.Tools.CheckValue(reportPath))
{
//domainName = HttpContext.Current.Request.Url.Host.Replace(".ar","");
var pname = reportPath;
pageReport = (PageReport)base.OnCreateReportHandler("report/" + pname + ".rdlx");
pageReport.Report.Name = pname;
_pageDocument = new PageDocument(pageReport);
pageReport.Report.DataSources.ConnectionProperties.ConnectString = "Driver={MySQL ODBC 8.0.17 UNICODE Driver};Server=192.168.1.1;Port=3306;Database=db;User=root;Password=123456;Option=3;";
//pageReport.Document.LocateDataSource += Document_LocateDataSource;
return pageReport;
}
else
{
return null;
}
}
catch (Exception e)
{
AppTools.LogServer.WriteTextLog(AppTools.LogType.Error, "ReportWebService.asmx-OnCreateReportHandler", e.Message, DateTime.Now);
return null;
}
} 提示“odbc驱动管理器未发现数据源名称并且未指定默认驱动程序”的问题我解决了,我安装了一下32位的odbc驱动。忽略ar是32位的了。我系统是64位的 好的,问题解决 了就好 目前是实现了后台切换数据源;但是有个新问题我再请教一下:
比如A表我之前用的是dataset数据源,也就是说我后台执行sql后返回dataset到报表,进行展示,
现在我改成odbc直连数据库就有个这个问题:
比如A表,我后台写了8,9个sql,我后台执行完8,9个sql以后,最终用程序拼装成一个datatable返回到报表;
现在我改成odbc直连,要在一个数据源下新建8,9个数据集,这时我没法拼装整理我这8,9个数据集,将这8,9个数据集展示到一张矩表上,这8,9个数据集是是需要交叉处理的。
页:
[1]
2