如何在不使用DSN或使用C#预装DataSet的情况下将Crystal Report(VS 2008 basic)连接到MySQL DB?
我需要在几个地方安装程序,所以我必须更改连接参数。我不想在每个地方创建DSN,也不想预加载DataSet并将其传递给报表引擎。我使用nhibernate访问数据库,因此创建和填充额外的DS将需要两倍的工作和以后的额外维护。我认为最好的选择是让晶体报告引擎使用ODBC自己连接到MySQL服务器。
我设法使用Database Expert在报表设计器(VS2008)中创建连接,创建ODBC(RDO)连接并输入此连接字符串
“DRIVER = {MySQL ODBC 5.1 Driver}; SERVER = myserver.mydomain”
并在“下一页”页面填写“用户ID”,“密码”和“数据库”参数。我没有填写“服务器”参数。有效。事实上,如果你使用以前的连接字符串,那么你在“服务器”参数上放什么并不重要,看起来参数是未使用的。另一方面,如果您使用“DRIVER = {MySQL ODBC 5.1 Driver}”作为连接字符串,稍后使用服务器的FQDN填充“Server”参数,则连接不起作用。
我怎么能通过代码来做到这一点?我到目前为止看到的所有示例都使用DSN或DataSet方法。我看到the same question posted but for PostgreSQL并尝试将其改编为mysql,但到目前为止还没有成功。第一种方法:
Rp.Load();
Rp.DataSourceConnections[0].SetConnection("DRIVER={MySQL ODBC 5.1 Driver};SERVER=myserver.mydomain", "database", "user", "pass");
Rp.ExportToDisk(ExportFormatType.PortableDocFormat, "report.pdf");
在ExportToDisk期间引发CrystalDecisions.CrystalReports.Engine.LogOnException
消息=“登录失败。\ n详细信息:IM002:[Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序。\ r \ n文件临时文件路径中的错误 .rpt: \ n无法连接:登录参数不正确。
InnerException是一个System.Runtime.InteropServices.COMException,具有相同的消息且没有InnerException
“没有指定默认驱动程序”让我想知道服务器参数在这里是否也未被使用(见上文)。在这种情况下:如何指定连接字符串?
我没有尝试过第二种方法,因为它不适用。
有人知道解决方案吗?
答案 0 :(得分:0)
我认为通过nHibernate生成数据集可能会更快,或者直接进行ADO.NET查询,然后尝试解决问题。