Tag: oracle

从C#中的PL / SQL匿名块返回游标

我正在努力将现有的应用程序从SQL Server转换为Oracle,我遇到了障碍。 我正在尝试将匿名块作为动态SQL执行并返回结果集。 然而,我尝试过的任何东西似乎都无法返回任何值。 由于设计限制,存储过程已经完成。 我的查询定义为: DECLARE type id_array IS TABLE OF number; t_Ids id_array; BEGIN UPDATE CSM_RECORDS SET MIGRATION_STATE = 1, LAST_UPDATE = CURRENT_DATE WHERE OBJECT_UID IN (SELECT OBJECT_UID FROM CSM_RECORDS obj WHERE MIGRATION_STATE = 0 AND ROWNUM <= :BatchSize) AND (:BatchName IS NULL OR obj.BATCH_NAME = :BatchName) RETURNING OBJECT_UID BULK COLLECT INTO t_Ids; […]

OracleBulkCopy内存泄漏(OutOfMemoryexception)

下面是我用于将数据从临时表dataTable批量复制到Oracle数据库中的destTable的代码。 dataTable有大约200万条记录。 using (OracleBulkCopy bulkCopy = new OracleBulkCopy(VMSDATAConnectionString)) { try { foreach (OracleBulkCopyColumnMapping columnMapping in columnMappings) bulkCopy.ColumnMappings.Add(columnMapping); bulkCopy.DestinationTableName = destTableName; //bulkCopy.BatchSize = dataTable.Rows.Count; //bulkCopy.BulkCopyTimeout = 100; int defaultSize = 5000; int.TryParse(ConfigurationManager.AppSettings[“OracleBulkCopyBatchSize”], out defaultSize); bulkCopy.BatchSize = defaultSize; int timeOut = 100; int.TryParse(ConfigurationManager.AppSettings[“OracleBulkCopyTimeout”], out timeOut); bulkCopy.BulkCopyTimeout = timeOut; Console.WriteLine(“Bulk insert from {0} to {1} started at: {2}\r\nBatchSize […]

Oracle中的C#,绑定变量和ID IN(1,2,3)之类的查询

我正在寻找以下Java技术的C#ODAC改编,其中代码能够将数字数组(数组大小可以变化)绑定到非PL / SQL SELECT语句中,然后在WHERE ID IN (…)使用结果数组WHERE ID IN (…)样式检查。 http://rafudb.blogspot.com/2011/10/variable-inlist.html 这是在基于OCI的C程序中使用的这种技术的另一个例子: Oracle OCI,绑定变量和ID IN(1,2,3)之类的查询 具体来说,我们想要执行一个类似的查询 SELECT * FROM MyTable WHERE ID IN (SELECT * FROM TABLE(:1)) 并将一系列Numbers传入:1 。

Oracle Entity Framework提供程序不会以毫秒为单位存储DateTime.Now

我和这个家伙基本上有完全相同的问题。 为什么我无法使用Entity Framework保存当前的DateTime.Now 但他使用的是SQL Server,而我正在使用Oracle。 (我的申请必须与两者合作) 他的问题是在数据库级别没有正确设置精度。 我注意到如果我手动编辑我的oracle数据库中的毫秒数,EF可以用毫秒提取正确的时间戳。 但是当我创建一个带有DateTime属性的实体到“DateTime.Now”时,它会被截断。 DateColumn1属性属于Oracle类型Timestamp 我记录了insert语句 insert into “SchemaName”.”TableName”(“DateColumn1”) values (:P0) –:P0:’5/14/2015 4:07:27 PM’ (Type = Date) 疯狂的是,这适用于SQL Server。

无法使用NHibernate登记分布式事务

我在unit testing中看到一个问题,其中Oracle被抛出exception,消息“无法在分布式事务中登记”。 我们正在使用ODP.net和NHibernate。 在嵌套事务中对数据库进行一定数量的提交后,问题就出现了。 令人讨厌的是,这在连续集成服务器(Windows Server 2003 R2 SP1)上失败了,而不是在我的开发机器(XP SP2)上。 这是该问题的一个小问题: using (new TransactionScope()) { for (int j = 0; j < 15; j++) { using (var transactionScope = new TransactionScope(TransactionScopeOption.Required)) using (var session = sessionFactory.OpenSession()) { for (int i = 0; i < 200; i++) { var obj = [create new NHibernate mapped obj] […]

C#2010,ODP.net,调用存储过程传递数组

我有一个PL / SQL存储过程,需要4个输入。 其中一个输入是关联数组(Oracle Type:VARCHAR2表(1)PLS_INTEGER索引)。 我想要一个C#程序,用适当的输入调用这个存储过程,包括关联数组。 我正在使用ODP.net 11.2与Visual C#2010 Express和Oracle 11gR2。 我找不到任何关于如何从C#传递数组到pl / sql过程的好例子。 有谁可以举个例子? 以下Oracle文档确切地告诉我错误的数字或参数类型。 我的C#代码: OracleCommand cmd = new OracleCommand(“begin sdg_test.sdg_test2(:1); end;”, conn); OracleParameter Param1 = cmd.Parameters.Add(“1”, OracleDbType.Varchar2); Param1.Direction = ParameterDirection.Input; Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray; Param1.Value = new string[22] { “Y”, “Y”, “N”, “Y”, “N”, “Y”, “Y”, “Y”, “Y”, “Y”, “N”, “Y”, “N”, “Y”, […]

如何修复“提供程序与Oracle客户端版本不兼容”?

我们使用的是Oracle.DataAccess.dll程序集版本2.102.2.20(32位)。 我将我们的Web API应用程序部署到IIS并尝试打开和关闭连接: private static void CheckConnectionUsingOracleClient(string connection) { var logger = DiContainer.Resolve(); try { logger.LogInfo(“Trying to connect to ” + connection); // check whether you can connect to the shop using Oracle.DataAccess using (var cnn = new Oracle.DataAccess.Client.OracleConnection(connection)) { cnn.Open(); cnn.Close(); } logger.LogInfo(“Succeeded to connect to ” + connection); } catch (System.Exception ex) { […]

Oracle ODP.Net与entity framework6 – 从表视图中选择ORA-00955

我已经创建了应用程序,首先使用ODP.Net而没有实体 – 效果很好。 static void Main(string[] args) { OracleConnection con = new OracleConnection(); //using connection string attributes to connect to Oracle Database con.ConnectionString = “user id=****;password=****;data source=” + “(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=server.org.net)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=ora1)))”; con.Open(); Console.WriteLine(“Connected to Oracle” + con.ServerVersion); OracleCommand command = con.CreateCommand(); command.CommandText = “SELECT ITEM FROM TEST.ORDERS”; OracleDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine(“\t{0}”, reader[0]); } […]

在C#中使用LIKE的Oracle绑定变量

作为停止使用动态SQL生成并鼓励使用绑定变量的努力的一部分,我遇到了一些问题。 我正在使用Oracle Data Providers for .NET从ASP.NET页面查询Oracle 9i数据库 查询是 sql = “SELECT somedata FROM sometable WHERE machine = :machineName “; 我按如下方式定义Oracle参数 OracleParameter parameter = new OracleParameter(); parameter.ParameterName = “machineName”; parameter.OracleDbType = OracleDbType.Varchar2; parameter.Value = machine; //machine is a variable of type string parameterList.Add(parameter); 这适用于“=”运算符。 但我似乎无法让它与“喜欢”一起工作。 我不知道如何格式化查询,以便它接受“%”通配符的使用。 我试过了: sql = “SELECT somedata FROM sometable WHERE machine LIKE […]

参数化查询(C#,Oracle):如何生成更具可读性的表示?

我在C#代码中使用参数化查询来与Oracle数据库进行交互。 如何以更易读的方式记录语句? 假设我有一个参数化查询,如: INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (:id, :name, :birthdate) 理想情况下,我希望看到更改了所有参数的日志条目,以便我可以复制并粘贴该语句供以后使用: INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (23, ‘Mike’, TO_DATE(‘2003/07/09’, ‘yyyy/mm/dd’) 我目前的方法是打印出参数化查询的字符串,然后迭代所有参数并使用ToString()。 如果有许多参数,这有点难以阅读。 它会产生类似于: INSERT INTO PERSON (ID, NAME, BIRTHDATE) VALUES (:id, :name, :birthdate) [:id=23, :name=Mike, birthdate=2004/07/09 00:00:00] 我计划的另一种方法是使用string.Replace()函数替换参数占位符。 但也许有更好的方法来做到这一点? 提前致谢。 编辑1: 我想更好地提供一些代码示例。 我在这种forms下使用参数化查询(注意:我使用的是log4net): using (OracleConnection connection = new OracleConnection(connectionString)) using […]