Tag: oracle

entity framework连接到Oracle:ODP for .NET“不支持时间”

我有一个entity framework,我有一个远程Oracle服务器,我通过连接字符串配置,我没有运行一些unit testing来确认连接。 我正在使用Oracle.ManagedDataAccess.Client 我收到错误: System.NotSupportedException:Oracle Data Provider for .NET不支持Time 。 我以前找不到任何人收到此错误。 我在想我的Oracle数据库中的表可能有很多提及的时间,但它们只有DATE。 我必须这样做,我将无法以不同的方式访问数据库。 可能导致此错误的原因是什么? 我该如何解决这个问题?

无法从NHibernate.Driver.OracleDataClientDriver创建驱动程序(将copy local设置为true)

我甚至在app.config中添加了这个小配置: ……没有成功 可能有什么不对? 另外,为了确保我的app.config是风水,这里是: true NHibernate.Dialect.Oracle10gDialect NHibernate.Driver.OracleDataClientDriver GuitarStore2 NHibernate.Connection.DriverConnectionProvider 为了记录,我在Windows 7 64位下使用最新的Nhibernate(3.3.1),在.NET 3.5上。 并且,对于完全相同的项目,我在另一台机器上遇到没有例外,但是在Windows XP中。

支持对象类型的.Net的第三方Oracle提供程序

我正在为.Net(ADO.NET)寻找第三方Oracle数据提供程序,它完全支持Oracle对象类型(如几何)。 我愚蠢地使用ODP.NET,现在我付出了代价 – 这是非常错误的,我刚刚到达终点(继续崩溃IIS池 – 已知问题,没有解决方案)。 我发现dotConnect很好,对象类型比ODP.NET慢4倍。 是否有其他提供商支持Oracle对象?

混淆NHibernate中的一对一映射

有人可以向我建议在以下情况下使用的相应映射: 父表 – Timesnsactions 子表 – TranCategory1,TranCategory2和TranCategory3以及其他8个。 所有十二个表共享相同的复合键。 现在,countnsactions中的count是所有子表中事务的总和。 子表仅包含父表中的唯一值。 我正在使用的映射如下所示。 我在Parent表中使用constrained =“true”只是为了避免在Parent表的Select语句中形成连接。 但是我想我反对“约束”这个词的定义,它指出对于Timesnsactions中的每个事务,TranCategory1中必须有一个事务。 但实际上在我的设计中反过来也是如此。 那么如何修改我的映射以复制正确的行为并避免使用连接? 更新:我的当前映射在加入父和子表时给我带来了错误。请帮我修改映射,以便我可以在上面的表上执行连接。 完整的映射 Parent Table Mapping 1 Child Table Mapping (There are 10 more child tables) 连接查询导致错误 var query1 = _ses.CreateCriteria().CreateAlias(“DisclosureGroupChange”, “discGrp”, NHibernate.SqlCommand.JoinType.InnerJoin).List() exception消息是: “ORA-00923:未找到FROM关键字\ n” exception消息中显示的SQL语句 SELECT this_.TRANSACTION_ID as TRANSACT1_15_1_, this_.PARTITION_MONTH_NUM as PARTITION2_15_1_, this_.AUDIT_QUEUE_ID as AUDIT3_15_1_, this_.AUDIT_RULE_ID as AUDIT4_15_1_, […]

ODP.NET / EF6 – WHERE子句中的CHAR数据类型

我正在使用EF6和ODP.NET开始一个项目,我在基于固定长度的CHAR列执行查找时遇到了麻烦。 即使此用户存在于数据库中,以下代码也不返回任何结果。 using (var context = new Entities()) { var search = “testuser”; var result = context.Users .Where(u => u.UserName == search) .FirstOrDefault(); } 我知道我可以通过填充搜索字符串或修剪数据库列来解决这个问题,但我正在寻找替代解决方案。 我注意到如果我使用OracleConnection / OracleCommand直接执行查询,那么它可以工作。 是否有一个属性或任何我可以添加到实体类以使ODP.NET将变量绑定为OracleDbType.Char? 基本上,我正在寻找一种从EF6重现以下行为的方法: var cmd = new OracleCommand(“SELECT * FROM users WHERE user_name = :p0”, conn); cmd.Parameters.Add(“:p0”, OracleDbType.Char).Value = “testuser”; 我还使用Devart的dotConnect Oracle驱动程序进行了测试。 使用该驱动程序,我可以通过添加以下代码行成功查找。 不过,我更喜欢在dotConnect上使用ODP.NET。 似乎ODP.NET忽略了这个属性,因为它在使用ODP.NET时没有任何效果。 ODP.NET会识别出与此类似的东西吗? modelBuilder.Entity() .Property(u […]

使用Entity Framework在数据库中搜索文本

我正在编写一个UI,允许某人通过他们的名字和/或姓名查找用户。 例如,如果您输入“Mike”作为名字,输入“Jo”作为姓氏,则会返回“Mike Jones”,“Mike Johnson”和“Mike Jobs”。 我在此搜索中使用以下LINQ语句: var users = (from u in context.TPM_USER where u.LASTNAME.ToLower().Contains(LastName.ToLower()) && u.FIRSTNAME.ToLower().Contains(FirstName.ToLower()) select u); (可能有或没有更好的方法来做一个不区分大小写的类似条款,但这似乎有效) 问题是如果用户输入名字或姓氏,但是将另一个字段留空。 如果我输入“Mike”作为名字并将“姓氏”字段留空,我想要返回所有Mikes而不管他们的姓氏。 除非两个字段至少填充了某些字段,否则上述查询不会返回任何结果。 我试过了: var users = (from u in context.TPM_USER where (LastName == “” || u.LASTNAME.ToLower().Contains(LastName.ToLower())) && (FirstName == “” || u.FIRSTNAME.ToLower().Contains(FirstName.ToLower())) select u); 但是,除非两个字段都填写完毕,否则我仍然没有结果。 我在调试器下validation了LastName == “”确实是真的。 更新: 我做了一些调试,这实际上是一个Oracle问题。 生成的查询是: –Replaced the field […]

‘MSDAORA.1’提供程序未在本地计算机上注册

我有一个应用程序连接到数据库,提取信息,创建一个Excel文件,然后删除文件/电子邮件X人文件。 该应用程序是使用.NET 2.0 Framework(Windows Form App)在Visual Studios中创建的。 它是在32位服务器上运行的。 但它最近被转移到64位服务器。 它现在返回错误消息“’MSDAORA.1’提供程序未在本地计算机上注册。” 我相信MSDAORA仅支持32位应用程序,并且在IIS中运行的应用程序池不适用于32位应用程序。 我将如何解决这个问题,我可以在IIS中更改一些内容吗? 或者是代码更改?

如何将表值参数从C#传递给Oracle存储过程

我有一个名为CREATE_CASE_EXL的Oracle存储过程: PROCEDURE CREATE_CASE_EXL(P_RICdata RICTab, P_sACTION_TYPE IN VARCHAR2); 其中RICTab是自定义类型: TYPE RICTab IS TABLE OF MMSRRicRec INDEX BY BINARY_INTEGER; TYPE MMSRRicRec IS RECORD ( RIC VARCHAR2(32), FID_NO NUMBER(8), REC_ID NUMBER(8), MMS_ACTION VARCHAR2(1) ); 我在PL / SQL中运行此代码来执行CREATE_CASE_EXL : DECLARE pTE_RICS RICTab BEGIN pTE_RICS(1).RIC := ‘RIC1’; pTE_RICS(1).FID_NO := NULL; pTE_RICS(1).REC_ID := 3; pTE_RICS(1).MMS_ACTION := ‘A’; pTE_RICS(1).RIC := ‘RIC2’; pTE_RICS(1).FID_NO […]

无法序列化DataTable。 未设置DataTable名称

我需要将所有数据表导出到单个XML文件,并且由于System.OutOfMemoryException(如果有一个巨大的表),我无法一次性导出所有行。 所以我试图导出N行。 但是,如果我在查询中使用分页语法,则WriteXml会抛出exception。 我在LINQPad中测试了两个查询,它们没问题。 System.InvalidOperationException:无法序列化DataTable。 未设置DataTable名称。 // The first query causes exception string oraQueryGetTableData = “SELECT * FROM (SELECT t0.* FROM MY_TABLE t0) WHERE ROWNUM <= 100"; // The second query runs without any error //oraQueryGetTableData = "SELECT * FROM MY_TABLE"; OracleCommand oraCommandGetTableData = new OracleCommand(oraQueryGetTableData, oraConnection); OracleDataReader oraReaderTableData = oraCommandGetTableData.ExecuteReader(); DataTable dataTable = new […]

当Insert工作时,如何更新BLOB列,错误ORA-00932

我无法更新BLOB字段,但Insert工作,请参阅下面的代码。 我的猜测是,它与在大量记录中存储一个BLOB值的问题有关,涉及复制大数据。 就我而言,我知道只会更新一条记录,但Oracle可能认为可能需要更新几条记录。 使用Insert时,只保证涉及1条记录,但并不总是使用Update。 现在我该如何解决这个问题? 注意:Where子句中的ArtNr字段是具有唯一索引的主键。 顺便说一下,我发现在互联网上插入BLOB有很多代码示例,但我找不到更新BLOB的代码示例。 using Oracle.DataAccess.Client;//needs reference to Oracle.DataAccess.dll using Oracle.DataAccess.Types; //OracleBlob public static bool StoreBlobImage(OracleConnection conn, string ArtNr, byte[] bImageJpg) { bool Ok = false; #if true // this is what I need, but does not work string Sql = “update MyTable set Image = :Image where ArtNr = :ArtNr”; #else […]