Tag: oracle

通过.NET调用带有PL / SQL集合类型参数的Oracle过程

我试图通过.NET调用Oracle存储过程。 通常这不是问题,但此存储过程包含一个PL / SQL集合类型的参数: create or replace type test_type as table of number; PROCEDURE TEST1 (pvTest IN test_type); 这是我的C#代码: var receiverIds = new decimal[] { 683552, 683553, 683572, 683573, 683592, 683593, 683594, 683612 }; var receiversList = new OracleParameter(“pvTest”, OracleDbType.Decimal, ParameterDirection.Input); receiversList.CollectionType = OracleCollectionType.PLSQLAssociativeArray; receiversList.Size = receiverIds.Length; receiversList.Value = receiverIds; using (var oracleCommand = new […]

odp.net可以将参数传递给布尔pl / sql参数吗?

是否可以正确地将OracleParameter传递给pl / sql存储过程中的布尔参数?

在CLOB字段中,.NET中的OraOLEDB提供程序是否不可靠?

我有一个查询似乎从OleDbDataReader返回错误的数据。 我已经包含了下面的实际代码(用户ID和密码已更改)。 我正在运行Oracle Express 10g。 如果我在Oracle Web Admin Utility中运行以下SQL,来自Toad,或者如果我将下面的代码更改为OracleConnection,则返回的所有4条记录都在“answer_text”列中具有值。 但是,从OleDbDataReader,这段代码在第二条记录上抛出一个exception,它为“answer_text”而不是预期值返回null:“这是第二个开放式评论。现在事情真的变得疯狂了。” 有问题的字段在数据库中定义为CLOB。 所以我的问题是,OraOLEDB提供商是否显然不可靠? 这是非常不稳定的行为。 4条记录中的3条正确返回数据。 简单地用OleDbConnection更改OracleConnection并从连接字符串中删除“Provider”似乎工作正常。 但是,出于分发/支持原因,我认为我的客户不想这样做。 Oracle只是我们支持的4个数据库供应商中的一个,并且此代码适用于其余部分。 这是一个已知的错误? 我缺少一些神秘的设置吗? 我对Oracle没有太多经验,而且我在google搜索这个问题时找不到任何东西。 任何意见,将不胜感激。 var connection = new OleDbConnection(“Provider=OraOLEDB.Oracle;Data Source=localhost;User Id=x;Password=x;”); connection.Open(); var command = connection.CreateCommand(); command.CommandText = “select response_id, item_id, subitem_id, answer_id, answer_text, other_text, column_answer_id from sur_response_answer where item_id in (180, 181)”; var reader = command.ExecuteReader(); while […]

Oracle编号为C#decimal

我知道在互联网上有几个关于这个问题的post和post,我已经阅读过它们(不是每篇文章,我都要承认)但是没有一个能完全满足我。 我的情况: 我正在使用ODP.net(dll版本2.111.6.0)访问Oracle DB(版本10 + 11)和DataReader来检索数据(.NET 3.5,C#)。 使用此代码会导致’ System.OverflowException(算术运算导致溢出) 。 decimal.TryParse(oraReader.GetOracleDecimal(0).Value.ToString(), NumberStyles.Any, null, out parsedOraDecimal) 这一个导致值为’ 3,0000000000000000000000000000000000000000000000000000000000000E-126 ‘ decimal.TryParse(oraReader.GetOracleValue(0).ToString(), NumberStyles.Any, null, out parsedOraDecimal) 现在我必须找到一些方法来正确检索和评估这个值 – 数据库也可以从我无法控制的其他应用程序中使用,因此无法进行更改。 将我的C#代码中的类型从’decimal’转换为’double’也不是一个真正的选择。 有任何想法吗?

VSentity framework中的Oracle实体不会更新代码中的主键

我有一个名为Tree的实体,它有一个名为Id的主键(使用StoreGeneratedPattern = Identity),当使用以下代码时,正确地插入到数据库中。 using(TestContainer tss = new TestContainer()) { Tree tree = new Tree() { Name = “TestTree” }; tss.Trees.AddObject(tree); tss.SaveChanges(); } 我有一个后备序列+触发器来处理自动递增的主键Id。 我已经validation这实际上正确插入数据库。 调用tss.Refresh(System.Data.Objects.RefreshMode.StoreWins, tree); 不更新对象(’Id’字段仍为0)。 有任何想法吗?

C#调用oracle存储函数

create or replace function ar_knyga_egzistuoja( id number ) return number is kiekis number; begin select count(*) into kiekis from knygos where kn_id = id; return kiekis; end; C#代码: conn.Open(); OracleCommand cmd = new OracleCommand(); cmd.Connection = conn; cmd.CommandText = “ar_knyga_egzistuoja”; cmd.CommandType = CommandType.StoredProcedure; OdbcParameter param = new OdbcParameter(); cmd.Parameters.Add(“id”, OracleType.Number).Value = id; cmd.ExecuteNonQuery(); var kiekis […]

从ADO.NET调用Oracle时批处理多个select语句

我想批处理多个select语句以减少到数据库的往返。 代码看起来像下面的伪代码。 它在SQL Server上运行完美,但在Oracle上不起作用 – Oracle抱怨sql语法。 我已经浏览了一下,我可以找到从Oracle返回多个结果集的唯一示例是使用存储过程。 是否可以在Oracle中执行此操作而不使用存储过程? 我正在使用MS Oracle数据提供程序,但如果需要,可以使用ODP.Net。 var sql = @” select * from table1 select * from table2 select * from table3″; DbCommand cmd = GetCommand(sql); using(var reader = cmd.ExecuteReader()) { dt1.Load(reader); reader.NextResult(); dt2.Load(reader); reader.NextResult(); dt3.Load(reader); }

EF查询到Oracle抛出“ORA-12704:字符集不匹配”

我正在尝试在Oracle的EF中合并几个列,然后在这样的列上执行.Contains() : public IEnumerable SearchUsers(string search) { search = search.ToLower(); return _securityUow.Users .Where(u => (u.FirstName.ToLower() + ” ” + u.LastName.ToLower() + ” (” + u.NetId.ToLower() + “)”).Contains(search)) .OrderBy(u => u.LastName) .ThenBy(u => u.FirstName) .AsEnumerable(); } 但是,我得到了这个例外: { “Message”: “An error has occurred.”, “ExceptionMessage”: “An error occurred while executing the command definition. See the inner exception […]

如何编写参数化的oracle插入查询?

我使用oracle作为我的后端,我写如下插入查询,我不知道是不是正确的方式, insert into Emp_table (SL_NO,empane,empid,salaray) values(1,’sree’,1002 ,:salary); 在这里查询我正在用存储过程计算工资并得到我的out参数工资所以我必须将它传递给我的插入查询所以我该怎么写。 如果我像所示的那样写,我会得到以下错误 ORA-06550: line 1, column 175: PL/SQL: ORA-00933: SQL command not properly ended ORA-06550: line 1, column 7: PL/SQL: SQL Statement ignored 请帮助我。

使用后是否有必要配置DbCommand?

我们使用Enterprise Library 3.0访问Oracle DB(microsoft oracle客户端)。 在调用存储过程或函数后不处理DbCommand实例时会发生什么? .NET会自动垃圾收集吗? 请注意,我们确保事务/连接已关闭并正确处理。