【问题标题】:Oracle Bulk inserts through ADO.NET (C#) - Can't use ODPOracle Bulk 通过 ADO.NET (C#) 插入 - 不能使用 ODP
【发布时间】:2011-08-26 14:10:09
【问题描述】:

尝试快速进行 oracle 批量插入,我目前在大约 110 秒内完成 4000 行......太糟糕了!我确实将我的插入绑定到事务,并且仅在事务完成后提交。我正在将参数绑定到 OracleCommand 以供输入。

我正在使用 ADO.NET 和通过 OCI 进行 C# 解析。 ODP.NET 真的不是一个选择,因为我不能牺牲可移植性。我想分发应用程序,以及一些 DLL..而不是安装 oracle 客户端!

关于如何加快速度的任何想法?

【问题讨论】:

  • 我不确定“ADO.NET 与 C# 通过 OCI 解析”到底是什么意思?请显示一些源代码...
  • ADO.NET 是微软的 oracle 驱动(System.Data.OracleClient)。 OCI 是 Oracle 调用接口 - 基本上只是用于安装 oracle 的 DLL。
  • 谢谢 - 我知道 ADO.NET 和 OCI 是什么,我不明白“解析”部分...
  • 从技术上讲,ADO.net 是一个供应商中立的数据接口库。 System.Data.OracleClient 是 Microsoft 已折旧的 Oracle 客户端。他们不再支持它,也不希望人们在新项目中使用它。另外,我不明白你在没有安装 Oracle 客户端的情况下如何使用 OCI,因为 OCI 是一个 Oracle 客户端接口。
  • OCI = oracle调用接口不是吗? oracle.com/technetwork/database/features/oci/index.html

标签: c# oracle ado.net


【解决方案1】:

我的建议是使用 ODP.net。这将是让这项工作更顺利运行的最佳方式。

要解决安装客户端问题,take a look at this Oracle forums thread on a DLL only deployment that you can bundle with your app。它比完整的 Oracle 客户端安装更紧凑,并且不需要任何类型的安装。

【讨论】:

  • 那篇文章的“限制”部分让我担心。它看起来真的不是那么便携。我希望能够仅分发我的 .EXE 和几个 DLL。还是我误解了帖子?
  • 限制是其他程序无法使用包含的 DLL,因为它们不在 GAC 中并且没有设置必要的注册表项。对于您的单个应用程序,这无关紧要,因为您将它们包括在内。您还必须使用 ezconnect 连接字符串而不是 TNS,但无论如何您都不能将 TNS 与 Microsoft 客户端一起使用。在你的具体情况下,我没有看到任何会影响你的东西。
  • 好的,Tirdus,谢谢。我现在正在尝试。收到错误:“Oracle.DataAccess.dll 中发生了‘Oracle.DataAccess.Client.OracleException’类型的第一次机会异常”我正在尝试捕获 OracleException,但得到一个空异常。
  • 您最好的解决办法是阅读线程的其余部分,看看其他有相同问题的人做了什么,并询问是否需要。在 ODP.net 论坛上比在 SO 上有更多有此经验的人。
【解决方案2】:

请注意,根据http://msdn.microsoft.com/en-us/library/system.data.oracleclient.aspx

System.Data.OracleClient已弃用

如果商业库是一个选项(最少 2 个 DLL),请查看 http://www.devart.com/dotconnect/oracle/ - 它具有“直接模式”,无需任何客户端安装即可工作,并且如果存在,它可以使用 OCI...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多