Tag: oracle11g

C#/ ODP.NET:大型IN子句解决方法

我们有一个C#组件,它处理将任意大小的元素列表附加到用于半任意SQL SELECT查询的IN子句中。 从本质上讲,这归结为接收如下内容: SELECT COUNT(*) FROM a WHERE b IN (…) …其中“…”是允许组件修改的查询的唯一部分。 目前该组件将插入一组以逗号分隔的命名绑定参数,然后将相应的IDbDataParameter对象附加到命令并执行; 组件知道它必须绑定的参数的类型。 这很有效,直到调用代码提供的参数集大于数据库愿意接受的参数集。 这里的目标是让这些大型集合通过ODP.NET处理针对Oracle 11gR2的查询。 由于以下方法被设定要求的人认为是不可接受的,因此这项任务有些复杂: 全球临时表 存储过程 任何需要CREATE TYPE东西都已被执行 解决方案不需要只执行一个查询。 我试图通过使用来自其他地方的代码将子句绑定为数组来完成此工作: IList values; //… OracleParameter parameter = new OracleParameter(); parameter.ParameterName = “parm”; parameter.DbType = DbType.String; parameter.Value = values.ToArray(); int[] sizes = new int[values.Count]; for (int index = 0; index < values.Count; index++) […]

“ORA-00932:不一致的数据类型:当使用entity framework尝试保存大型xml时,预期NUMBER获得NCLOB”错误

当我尝试使用ADO.NET Entity Framework将带有大型xml的新记录插入带有XmlType列的oracle表时,我收到以下错误。 Oracle.DataAccess.Client.OracleException Message=ORA-06550: line 5, column 22: PL/SQL: ORA-00932: inconsistent datatypes: expected NUMBER got NCLOB ORA-06550: line 4, column 1: PL/SQL: SQL Statement ignored 映射到此列的属性的数据类型是string。 但是当我尝试插入一个小的xml时,它会保存它没有任何问题。

使用12c客户端截断的存储过程OUTPUT VARCHAR2值

我正在使用oracle 11g 。 我的存储过程返回varchar2但它的值被oracle client截断。 以下是我的代码: if ((ds != null) && (ds.Tables.Count > 0)) { foreach (DataRow rw in ds.Tables[0].Rows) { OracleParameter param = new OracleParameter((rw[“argument_name”]).ToString(), GetOracleType(rw[“data_type”].ToString().ToUpper())); param.Direction = GetParameterDirection((rw[“in_out”]).ToString().ToUpper()); discoveryCommand.Parameters.Add(param); if (param.Direction == ParameterDirection.Output && param.OracleType == OracleType.VarChar) { param.Size = 4000; } } } 我将param.size增加到4000但仍然会截断值。 对此有什么解决方案吗? 在服务器上我有Oracle 12c 。 我需要在我的项目中不更新oracle客户端版本的情况下获得解决方案,因为某些原因不允许这样做。 以下是SP。 我修改它以返回硬编码值。 还是同样的问题。 […]

将数据表从C#传递到Oracle存储过程

如何将数据表或数据集从C#传递到Oracle中的存储过程

选择未锁定的行oracle

我在C#中有一个使用Oracle数据库的应用程序。 我需要一个查询来从oracle数据库中的表中获取未锁定的行。 如何选择所有未锁定的行? 是否有任何“翻译器”可以将此T-SQL(MS SQL Server)查询转换为Oracle方言? SELECT TOP 1 * FROM TableXY WITH(UPDLOCK, READPAST); 我对Oracle缺乏这样的function感到有些失望。 他们想让我使用AQ或者什么?

ODP.NET错误无法找到请求的.Net Framework数据提供程序

我正在尝试使用Oracle 11g Express和.NET 4.0框架开发ASP.NET MVC 4.0应用程序。 我可以使用ODP.NET提供程序连接到数据库,也可以针对数据库生成我的EDMX。 我不能做的是使用entity framework查询底层数据库。 使用生成的connectionString Visual Studio实例化我的DbContext时,出现以下错误: 无法找到请求的.Net Framework数据提供程序。 它可能没有安装 但是,它安装是因为 我可以在GAC中看到dll。 它在machine.config中提到。 它由我的项目引用。 我实际上用它来从数据库生成我的EDMX。 我已经确认我到处都引用了正确的版本(4.112.3.0) 我在Cassini本地运行代码,我的硬件是32位架构,所以我假设我只能使用32位DLL,所以这不是架构问题。 代码的具体位是这样的: public class MyContext : ObjectContext, IUnitOfWork { public MyContext() : base(ConfigurationManager .ConnectionStrings[“OracleEntities”] .ConnectionString)//Connectionstring is verified {} } 在我离开一切之前请帮助我,留胡子然后在某个地方住在山上。 解决方案 :由于我没有看到任何提及解决方案,我会在这里为后代提及它。 Andrei下面询问了我的连接字符串格式,虽然我很狡猾,但我去看看了。 这就是我所看到的: metadata=res://*/OracleModel.csdl|res://*/ OracleModel.ssdl|res://*/ OracleModel.msl; provider=provider=Oracle.DataAccess.Client; provider connection string="DATA SOURCE=localhost:1521; PASSWORD=xxx;PERSIST SECURITY […]

连接到Oracle数据库

我正在尝试连接到Oracle数据库,但是当代码执行该行时: con = new OracleConnection(oradb); 它给出了这个错误。 “程序无法启动,因为您的计算机缺少oraons.dll。请尝试重新安装该程序以解决此问题。” 我已经从以下站点http://www.oracle.com/technetwork/topics/dotnet/index-085163.html在我的计算机上安装了ODP for .net并引用了Oracle.DataAccess。 我还检查了安装的文件夹,我可以在文件夹中看到oraons dll。 这是代码: class OracleDatabase { OracleConnection con; public void ConnectToOracleDb() { string oradb = getConnectionString(“host”, 1521, “sid”, “user”, “pass”); try { con = new OracleConnection(oradb); con.Open(); Console.WriteLine(“Connected to Oracle” + con.ServerVersion); } catch { Console.WriteLine(“Could not connect to FLX”); } } private static string […]

使用C#和ODP.NET执行Oracle事务

我糊涂了。 从表面上看,在C#中执行事务似乎很简单。 从这里: http://docs.oracle.com/cd/B19306_01/win.102/b14307/OracleTransactionClass.htm string constr = “User Id=scott;Password=tiger;Data Source=oracle”; OracleConnection con = new OracleConnection(constr); con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandText = “SELECT COUNT(*) FROM MyTable”; // Start a transaction OracleTransaction txn = con.BeginTransaction( IsolationLevel.ReadCommitted); try { // Insert the same row twice into MyTable cmd.CommandText = “INSERT INTO MyTable VALUES (1)”; cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery(); // […]

将System.Data.OracleClient替换为Oracle.DataAccess(ODP.NET)

我有一个目前正在使用System.Data.OracleClient的项目,因为它已被弃用,所以我想切换到Oracle 11g的ODP.NET最新版本。 如果以下步骤对我有用,或者在没有任何错误的情况下需要执行某些其他操作,请告知我们: 删除对SYstem.Data.OracleClient的引用 添加对Oracle.DataAccess dll的引用 用OracleDbType替换OracleType枚举,并将对VarChar的数据类型的引用更新为Varchar2等。

从Oracle DB检索图像

所以,我正在使用web api来检索图像!! 但是,在DB处,图像是LongRaw。 我在谷歌看到我需要使用OracleDbType.Blob但是,当我尝试使用它时, public IEnumerable GetFoto(string suspid) { DataSet lretorno = new DataSet(); string connectionString = GetConnectionString(); using (OracleConnection connection = new OracleConnection()) { connection.ConnectionString = connectionString; OracleDataReader reader = null; OracleCommand cmd = new OracleCommand(); cmd.InitialLONGFetchSize = 50000; cmd.Connection = connection; cmd = new OracleCommand(“MOBILE.XAPIMANDADOMOBILE.BUSCAFOTO”, connection); cmd.CommandType = CommandType.StoredProcedure; //variáveis entrada cmd.Parameters.Add(new OracleParameter(“SUSPID”, […]