显然,我不想安装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。
答案 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以使用新的托管驱动程序。这解决了我所有的问题。