我是否可以在Mono环境(在Linux上)和ClickOnce部署(在Windows上)上工作的方式连接到Oracle数据库?

时间:2010-04-15 14:01:06

标签: c# oracle mono clickonce

显然,我不想安装Oracle客户端(除了简单的DLL),因为这会禁止我的ClickOnce目标。我尝试了System.Data.OracleClient,但它引发了一个异常,“System.Data.OracleClient需要Oracle客户端软件版本8.1.7或更高版本。”

更新:
似乎System.Data.OracleClient不是要走的路。所以我下载了Oracle ODP.NET提供程序的xcopy-able版本。然后我运行“install.bat odp.net20 c:\ oracle odac”来仅安装ODP.NET。然后我在我的项目中添加了一个引用到C:\ oracle \ odp.net \ bin \ 2.x \ Oracle.DataAccess.dll。这让我可以点击Oracle DB。但是当我把所有文件都带到一台干净的机器(包括oracle DLL)时,我得到一个异常:“'Oracle.DataAccess.Client.OracleConnection'的类型初始化器引发了异常。”所以它似乎依赖于其他一些文件。但我不知道是什么文件。它是如何知道文件的位置的呢?注册表项? ClickOnce看起来不太好。

更新:
只要我包含mcauthorn提到的文件,它就可以工作:oci.dll,oracle.dataaccess.dll,oraociei11.dll,& oraops11w.dll。不幸的是,oraociei11.dll非常大--114MB。

3 个答案:

答案 0 :(得分:2)

我想去获取ODP.Net Dlls here。你将不得不抓住XCopy版本,然后将必要的DLL添加到你的项目中,然后你应该好好去。 System.Data.OracleClient已停止使用,Microsoft不推荐使用。

答案 1 :(得分:0)

您可以使用第三方ADO.NET提供程序。试试this one。它不需要Oracle客户端并在Mono上运行。

答案 2 :(得分:0)

更新,因为原来的答案是4岁。

只需使用Oracle的托管驱动程序即可。你只需要它,没有别的。然后,您可以直接使用简单的连接字符串连接到数据库。

<system.data>
  <DbProviderFactories>
    <remove invariant="Oracle.ManagedDataAccess.Client" />
    <!-- If any should be in the machine.config -->
    <add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral" />
  </DbProviderFactories>
</system.data>
<connectionStrings>
  <clear />
  <add name="OracleContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="DATA SOURCE=<IP_ADDRESS>:1521/XE;PASSWORD=<PASSWORD>;USER ID=<USER_ID>;Connection Timeout=600;Validate Connection=true" />
</connectionStrings>

我使用ServiceStack的OrmLite作为ORM,但如果您不想使用ORM或其他任何东西,它也可以直接使用。您需要确保的是,您的ORM库也使用托管驱动程序而不是旧驱动程序。我写了一篇关于黑客的博客文章,我不得不更改ServiceStack.OrmLite.Oracle以使用新的托管驱动程序。这解决了我所有的问题。