标签: odp.net

如何在不使用OracleObjectMappingAttribute的情况下从Oracle UDT映射到ODP.NET?

我们的应用程序中的数据访问层将使用Oracle的UDT功能.我们只会将UDT对象传入和传出数据库.

目前,我们使用ODP.NET提供的函数生成自定义类(它创建了一个我们在代码库中真正不需要的真正可怕的类).

然后,我们使用单独的映射类将自定义类映射到我们的一个业务对象(并在保存时返回).

我想找到一个更好的方法来做到这一点.

我想我只是去处理生成的类,然后编写一个实现了IOracleCustomType的映射类.然后,From/ToCustomObject方法将从我的UDT映射到我的业务对象.但是,当我尝试它时,这会给我带来问题 - 我收到错误"对象属性未映射到自定义类型成员".看来这两个方法,我也需要我的映射类中的属性 - UDT中每个项目的一个属性.

例如,工作流UDT包含三个项目 - 状态,创建时间和创建时间.我的UDT很简单:

TYPE workflow_type AS OBJECT
(status                                  VARCHAR2(8)
,created_by                              VARCHAR2(30)
,created_datetime            DATE
);
Run Code Online (Sandbox Code Playgroud)

我希望它最终成为业务对象:

public class Workflow
{
    /// <summary>
    /// Gets the status of the workflow.
    /// </summary>
    /// <value>The status.</value>
    public string Status { get; private set; }

    /// <summary>
    /// Gets the Windows Logon Id of the user performing the action
    /// </summary>
    public string CreatedBy{ get; private set; }
    /// <summary>
    /// Gets the time of …
Run Code Online (Sandbox Code Playgroud)

.net c# oracle odp.net user-defined-types

9
推荐指数
1
解决办法
9970
查看次数

DbProviderFactories for .NET Error

我无法让ODP.NEt库与.NET DBProviderFactories一起使用.我使用此代码收到以下错误:

_DBFactory = DbProviderFactories.GetFactory(providerName);
Run Code Online (Sandbox Code Playgroud)

为system.data创建配置节处理程序时发生错误:列'InvariantName'被限制为唯一.值'Oracle.DataAccess.Client'已存在.

使用此providerName:Oracle.DataAccess.Client

以及web.config中的以下条目:

  <system.data>
    <DbProviderFactories>
      <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
Run Code Online (Sandbox Code Playgroud)

有谁知道什么是错的?我不认为我在任何地方设置了两次.

.net web-config odp.net dbproviderfactories

9
推荐指数
2
解决办法
1万
查看次数

实体数据模型向导中没有Oracle DataSource

我正在使用ODP.NET,我需要从我的数据库生成ORM.

我安装了:

  • Visual Studio 2010 Ultimate
  • ODAC1120250Beta_EntityFramework_x64.zip

在Server Expolorer中,我可以看到Oracle数据库的数据源,我可以连接到远程oracle服务器并运行查询.

当我添加ADO.NET实体数据模型,并想生成数据库代码我不能看到Oracle数据源就像在服务器资源管理器.

你需要下载一些额外的东西来运行ODP.NET的实体框架吗?

编辑:

  1. 使用最新版本的ODP.NET
  2. 取消选中Microsoft Transaction Server的Oracle服务....安装期间

.net oracle orm entity-framework odp.net

9
推荐指数
1
解决办法
5726
查看次数

实体框架6(5)与Oracle的连接

我正在尝试为在.net中使用Oracle的应用程序套件编写数据访问库.我们目前正在使用NHibernate并且正在考虑迁移,因为它看起来并不是很好.

我正在使用Visual Studio 2013,我们已经构建了Oracle数据库.我们没有写更新它(这是db人员的域).所以这不会成为我们最终计算的一部分.

服务器上的客户端是32位,所以我们现在要坚持使用它.它已经是GAC了,没有必要改变它.所以我们的开发盒上有32位客户端.

我通过nuget将EntityFramework 6.1.0安装到我的项目中.我在我的项目中安装了ODAC 1.112.3.20.32位版本的应用程序.我也安装了ODP.net.x86驱动程序(也通过nuget).

问题是每次我尝试创建ADO.net数据库连接时,oracle提供程序永远不是一个选项?我错过了什么?我需要什么才能让它发挥作用?

我曾经读过一个oracle论坛,说我需要将我的实体框架设置为5.0而不是6.0.哪个好,但我该怎么做?

odp.net odac entity-framework-6 visual-studio-2013

9
推荐指数
3
解决办法
2万
查看次数

ODP.NET托管 - 无法找到请求的.Net Framework数据提供程序

使用Visual Studio 2013,我使用Nuget将最新版本的ODP.NET Managed添加到项目中:

Install-Package odp.net.managed
Run Code Online (Sandbox Code Playgroud)

http://www.nuget.org/packages/odp.net.managed/121.1.2

现在,当我尝试运行以下代码时:

Database db = DatabaseFactory.CreateDatabase();
Run Code Online (Sandbox Code Playgroud)

它抛出以下异常:

An exception of type 'System.ArgumentException' occurred 
in System.Data.dll but was not handled in user code
Additional information: Unable to find the requested .Net
Framework Data Provider.  It may not be installed.
Run Code Online (Sandbox Code Playgroud)

在阅读其他用户的类似问题后,我将托管驱动程序部分添加到C:\ Windows\Microsoft.Net\Framework64\v4.0.30319\Config\machine.config:

<system.data>
        <DbProviderFactories><add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
        <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, …
Run Code Online (Sandbox Code Playgroud)

.net c# oracle odp.net

9
推荐指数
2
解决办法
2万
查看次数

托管的ODP.NET驱动程序未显示在"数据源"对话框中

在我的计算机上安装了托管ODP.NET后,ODP.NET托管驱动程序不会出现在Visual Studio 2013 Professional中的"选择数据源"对话框中.

它应该是这样的:

在此输入图像描述

这就是它在我的机器上的实际外观:

在此输入图像描述

我已经按照Oracle网站上" An Easy Drive to .NET "一文中描述的步骤进行操作.

我还安装了Visual StudioOracle Developer Tools.仍然没有托管驱动程序可供选择

我的问题:

为了让数据提供者出现,有什么我忘了做的吗?

.net oracle odp.net visual-studio visual-studio-2013

9
推荐指数
2
解决办法
2万
查看次数

尝试使用ODP .NET连接时出现ORA-12154错误

尝试使用ODP .NET连接时出现ORA-12154错误

更新:Wernfried的回答为我解决了.

创建一个环境变量TNS_ADMIN = D:\ oracle\product\12.1.0\dbhome_1 \network\admin

Sqlplus从Registry读取TNS_ADMIN但ODP.NET托管驱动程序不读取注册表.另请参阅: OdbcConnection将中文字符返回为"?"

您可以通过以下方式检查环境变量:

string tns_admin = Environment.GetEnvironmentVariable("TNS_ADMIN")
Run Code Online (Sandbox Code Playgroud)

我并没有完全理解他建议的链接是如何相关的.

原始问题:

尝试使用ODP .NET连接时出现ORA-12154错误

代码:

  OracleConnection oracleConnection = new OracleConnection();
  string connectionString = "User Id=redacted;Password=redacted;Data Source=db6";
  oracleConnection.ConnectionString = connectionString;
  oracleConnection.Open();
Run Code Online (Sandbox Code Playgroud)

错误:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified ---> OracleInternal.Network.NetworkException: ORA-12154: TNS:could not resolve the connect identifier specified
   at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, String instanceName)
   at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor)
   at OracleInternal.Network.OracleCommunication.Connect(String 
Run Code Online (Sandbox Code Playgroud)

我的tnsnames.ora:

# tnsnames.ora …
Run Code Online (Sandbox Code Playgroud)

oracle odp.net

9
推荐指数
1
解决办法
9019
查看次数

仅比较实体框架6中的datetime与odp.net Oracle 12c的时间

我正在使用oracle和Sql的实体框架6.Timespan数据类型不适用于oracle.所以我将数据类型更改为datetime.现在我想只比较日期时间与Linq查询的时间.恩.

var db0010016 = _idb0010016Rep.GetAll().Where(e => e.ExecutionTime.TimeOfDay == viewmodel.ExecutionTime).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,e.ExecutionTime是datetime,viewmodel.ExecutionTime是时间跨度.我正在使用timeofday函数将其转换为时间跨度

上面的查询无法执行所以我使用了DbFunctions.CreateTime()函数

var db0010016 = _idb0010016Rep.FindBy(e => DbFunctions.CreateTime(e.ExecutionTime.Hour, e.ExecutionTime.Minute, e.ExecutionTime.Second) == exetime).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

以上ex exetime是timespan.still我得到低于错误

{"Invalid parameter binding\r\nParameter name: ParameterName"}
Run Code Online (Sandbox Code Playgroud)

c# linq oracle entity-framework odp.net

9
推荐指数
1
解决办法
570
查看次数

Oracle 11g客户端是否需要ODP.NET?

我可能在这里提出错误的问题,如果是的话,我愿意改变它.

我有一个使用Microsoft.NET Oracle提供程序的项目(我们的计划是更改为ODP,但我们还没有这样做).

我试图让这个项目在Windows 2008(x64)构建服务器上构建.它构建得很好但我们的单元测试在他们点击Oracle数据库上的东西时失败了.

我最初安装了32位oracle 9i客户端,这是我们目前在winxp开发盒和之前的2003构建服务器上使用的.但现在这会得到如下消息:尝试加载Oracle客户端库会引发BadImageFormatException.在安装了32位Oracle客户端组件的64位模式下运行时,将发生此问题.

我们尝试编译到x86平台,但没有更改错误消息.

我现在安装了11g 64位客户端,但是我收到一条消息,说System.Data.OracleClient需要Oracle客户端软件版本8.1.7或更高版本.

那么我应该使用Oracle安装什么?

编辑:

我能够让这个工作.原来这是导致问题的测试,迫使NUnit以32位模式运行:http://geekswithblogs.net/Lance/archive/2006/12/28/102191.aspx我能够让测试工作使用旧的32位驱动程序.对于这个问题,这将是一个糟糕的答案,所以我没有使用它,但很乐意为任何向转换到Oracle 64位驱动程序提供一些好信息的人给出正确的答案.

oracle odp.net

8
推荐指数
1
解决办法
2万
查看次数

ORA-12571:TNS:使用ASP.NET的数据包写入程序失败

我的开发团队ORA-12571: TNS:packet writer failure使用ASP.NET 3.5和4.0对Oracle 11g 遇到了很多错误.这些错误在它们何时发生时是不一致的,并且由许多应用程序生成.调用随机存储过程,数据包和内联SQL语句时会发生此异常.Oracle 11客户端安装在Web服务器上.某些应用程序使用Microsoft System.Data.OracleClient连接到Oracle,有些应用程序使用oracle(ODP.NET)提供的.NET组件.两个数据访问对象都会出现相同的错误.

还有其他非.NET应用程序在不同的Web服务器上运行,但使用相同的数据库服务器.这些应用程序没有任何此类问题.我最初的想法是,使用Oracle客户端在Web服务器上配置错误.

有没有其他人收到此错误?你做了什么修复它?

ORA-12571: TNS:packet writer failure
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
   at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
   at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals)
   at System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataSet …
Run Code Online (Sandbox Code Playgroud)

asp.net odp.net oracle11g system.data.oracleclient

8
推荐指数
2
解决办法
2万
查看次数