如何通过没有DSN或DataSet的C#代码直接将Crystal Reports连接到MySQL

时间:2010-04-27 20:57:08

标签: c# mysql crystal-reports

如何在不使用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

没有指定默认驱动程序”让我想知道服务器参数在这里是否也未被使用(见上文)。在这种情况下:如何指定连接字符串?

我没有尝试过第二种方法,因为它不适用。

有人知道解决方案吗?

1 个答案:

答案 0 :(得分:0)

我认为通过nHibernate生成数据集可能会更快,或者直接进行ADO.NET查询,然后尝试解决问题。