标签: oracle-manageddataaccess

从C#中的DBMS_OUTPUT.GET_LINES获取输出缓冲区

我试图DBMS_OUTPUT.PUT_LINE()通过C#从我的匿名PL/SQL块中获取方法的输出.我在这里看了几个其他相关的问题,但我仍然遇到麻烦.执行匿名块的返回代码正在返回-1,根据文档应该是正确的.

我正在设置DBMS_OUTPUT.ENABLE()to NULL以便不设置特定的缓冲区大小,然后使用该DBMS_OUTPUT.GET_LINES()方法从该缓冲区获取行.

它在缓冲区中返回任何内容(空OracleString[])并返回0行.我的匿名PL/SQL块很简单,但应该适用于任何.

DECLARE
    lvsName VARCHAR2(6) := 'Oracle';
BEGIN
    DBMS_OUTPUT.PUT_LINE('Do you see me?');
    DBMS_OUTPUT.PUT_LINE('My name is: ' || lvsName);    
END;
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

using (OracleDataAdapter oda = new OracleDataAdapter())
using (OracleCommand cmd = new OracleCommand(sql, _connection))
{
    // Execute anonymous PL/SQL block
    cmd.CommandType = CommandType.Text;
    var res = cmd.ExecuteNonQuery();

    // Set output Buffer
    cmd.CommandText = "BEGIN DBMS_OUTPUT.ENABLE(NULL); END;";
    cmd.CommandType = CommandType.Text;
    cmd.ExecuteNonQuery();

    // Get output
    cmd.CommandText …
Run Code Online (Sandbox Code Playgroud)

.net c# oracle odp.net oracle-manageddataaccess

10
推荐指数
2
解决办法
848
查看次数

使用带有输出参数的Entity Framework调用Oracle存储过程?

我有一个简单的Oracle存储过程,它传入三个参数,并有一个输出参数:

CREATE OR REPLACE PROCEDURE RA.RA_REGISTERASSET
(
    INPROJECTNAME IN VARCHAR2
    ,INCOUNTRYCODE IN VARCHAR2
    ,INLOCATION IN VARCHAR2
    ,OUTASSETREGISTERED OUT VARCHAR2
)
AS
BEGIN
  SELECT 
      INPROJECTNAME || ', ' || INLOCATION || ', ' || INCOUNTRYCODE
  INTO
      OUTASSETREGISTERED
  FROM
      DUAL;     
END RA_REGISTERASSET;
Run Code Online (Sandbox Code Playgroud)

我试图使用Entity Framework 6.1来获取OutAssetRegistered值,但是,我在调用之后得到一个null SqlQuery,没有异常:

public class CmdRegisterAssetDto
{
        public string inProjectName { get; set; }
        public string inCountryCode { get; set; }
        public string inLocation { get; set; }
        public string OutAssetRegistered { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)

c# oracle entity-framework entity-framework-6 oracle-manageddataaccess

7
推荐指数
1
解决办法
3550
查看次数

实体框架ORA-00932:不一致的数据类型:"'预期CLOB得到CHAR"

Oracle.ManagedDataAccess.EntityFramework 6.122.1.0库用于从MVC ASP.Net应用程序访问Oracle数据库.这是截至2017年11月14日NuGet的最新图书馆版本

protected override Expression<Func<MyEntity, object>> getSelector()
{   
    return m => new
    {
        ID = m.ID,
        NAME = m.Name,
        LONGSTRING = "Blah-blah-blah-blah...some thousands characters..." + 
                      m.ID + "blah-blah...blah" 
    };
}

protected override ProblemMethod()
{
    var result = db.MyEntity.Select(getSelector()).ToList();
}
Run Code Online (Sandbox Code Playgroud)

有问题.发生这种情况,因为非常长的字符串(几千个字符)被连接进去 LONGSTRING,执行Select抛出下一个异常.

ORA-00932:不一致的数据类型:"'预期CLOB得到了CHAR"

我的班级需要获得ExpressionGetSelector()压倒一切的.如何克服错误或绕过它?一种绕过的方法是强制EF Select在客户端上执行.怎么做?

PS:俄语同样的问题.

UPDATE

我应该提出MyEntity

 CREATE TABLE MyEntity (ID NUMBER(10), Name VARCHAR2(100));
Run Code Online (Sandbox Code Playgroud)

c# oracle entity-framework clob oracle-manageddataaccess

7
推荐指数
1
解决办法
1213
查看次数

从12.1更新到Oracle 12.2后,表操作符出错(ORA-21700)

我们的Oracle数据库最近从12.1.0.2更新到12.2.0.1 +补丁集更新20180417.

自更新以来,我们在调用plsql过程时收到以下错误: ORA-21700:对象不存在或标记为删除

我们已经缩小了问题范围,它似乎是由在包中定义的关联数组上使用表运算符引起的.我的所有研究表明,我们正在做的是在12.1中引入的,并且仍然应该在12.2中工作.

下面是与相关类型定义失败的过程的简化版本.它是使用托管数据访问从c#代码调用的.

这是包中的关联数组类型定义:

TYPE NUMBER_ARRAY IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
Run Code Online (Sandbox Code Playgroud)

这是一个失败的过程:

PROCEDURE GetReadingStatus(
  STATUSID_ARR IN NUMBER_ARRAY,
  P_RETURNS OUT SYS_REFCURSOR    
)
BEGIN
  OPEN P_RETURNS FOR
    SELECT * FROM READINGSTATUS rs
    WHERE rs.statusID IN (select * from table(STATUSID_ARR));
END;
Run Code Online (Sandbox Code Playgroud)

如果select * from table(STATUSID_ARR)部分被移除,它将运行.

在12.2中对关联数组使用表运算符是否存在问题?问题可能源于其他问题吗?

sql oracle plsql oracle12c oracle-manageddataaccess

7
推荐指数
1
解决办法
466
查看次数

实体框架核心-Take(1),Single(),First()...无法与Oracle Provider一起使用(ORA-00933:SQL命令未正确结束)

我正在将ef core(2.2.4)与oracle数据库一起使用

oracleProvider:Oracle.EntityFrameworkCore(2.18.0-beta3)

此代码:

IQueryable<KeyInfo> queryable = context
                .KeyInfos
                .Where(x => x.MobileNumber == "989191111111")
                .Take(1);
Run Code Online (Sandbox Code Playgroud)

生成此数据库查询:

SELECT "x"."ID", "x"."Key", "x"."MobileNumber", "x"."NationalCode"
FROM "KeyInfo" "x"
WHERE "x"."MobileNumber" = N'989191111111'
FETCH FIRST 1 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)

运行查询给我这个错误:

ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:
Error at Line: 4 Column: 1
Run Code Online (Sandbox Code Playgroud)

反正要解决吗?正确的方法是获得第一行

AND rownum = 1

仅获取第一行

和.ToList()与IQueryable一起正常工作

c# oracle entity-framework entity-framework-core oracle-manageddataaccess

6
推荐指数
1
解决办法
953
查看次数

使用EF 6和Oracle.ManagedDataAccess时,表不存在

我正在使用EF 6.0.0.0和ODP.Net Oracle.ManagedDataAccess版本创建一个MVC应用程序来4.121.2.0进行数据访问.

在我的Controller调用中EmployeeController,我有以下代码片段:

public ActionResult Details(int id) {
    try {
        EmployeeContext employeeContext = new EmployeeContext();
        Employee employee = employeeContext.Employees.Single(x => x.Id == id); //Here the exception occurs!
        return View(employee);
    } catch (Exception e) {
        return View(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我加载Employee/Details.cshtml页面时,我得到以下例外:

"执行命令定义时发生错误.有关详细信息,请参阅内部异常."

在内部异常中,它说:

ORA-00942:表或视图不存在

这让我很困惑,因为在我的Oracle数据库中,该表肯定存在(我使用Toad for Oracle检查):

在此输入图像描述

connectionString数据库本身是我使用的其他项目,我在哪里可以查询从数据库中的数据没有困难相同的连接字符串.

以下是我的Employee类在以下方面的声明Models/Employee.cs:

using System.ComponentModel.DataAnnotations.Schema;
.
.
.
[Table("TBLEMPLOYEE")] //the same table name
public class Employee {
    public int …
Run Code Online (Sandbox Code Playgroud)

c# oracle asp.net-mvc entity-framework oracle-manageddataaccess

5
推荐指数
1
解决办法
7538
查看次数

如何使用实体框架使用序列在 Oracle 中插入标识值

在 Oracle 数据库中,它的 ID 列定义为数字:

在此处输入图片说明

...以及表的相应序列...:

在此处输入图片说明

如何确保 ID 列获得序列中的下一个值?

using (var db = new MyOracleDb()){
    var user= new User(){ first_name = 'Abe', last_name = 'Lincoln'};
    //Do something here with the sequence and set the ID?
    db.User.Add(user);
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

我正在使用最新的 Oracle.ManagedDataAccess 和 Oracle.ManagedDataAccess.EntityFramework + EF6x。

c# oracle entity-framework oracle-manageddataaccess

4
推荐指数
1
解决办法
4820
查看次数

“ORA-00933:SQL 命令未正确结束”使用 Oracle.ManagedDataAccess

我得到了我只能描述为来自 nuget 的 oracle.ManagedDataAccess 包,似乎在我的查询末尾添加了字符。

我的最终目标是以 C# 命令参数的形式为下面的 SQL 提供绑定变量。

我的查询:(如果使用 SQL Developer 执行可以正常工作,返回 3 个字符串和一个日期时间)

with max_shift as (
  select max(shi.shift_id) shift_id
  from source_schema.site_instance ins
    join source_schema.tu_move_shifts shi on ins.instance_id = shi.instance_id
  where ins.instance_name = 'SiteOneSubsiteTwo' 
),
max_values as (
  select max(end_time) event_time 
  from max_shift ms
    join source_schema.events_extract ev on ev.move_shift_id = ms.shift_id
  where ev.site_code = 'SiteOne'

  union all 

  select max(destination_arrive_time) event_time
  from max_shift ms 
    join source_schema.movements_extract mov on mov.move_shift_id = ms.shift_id
  where mov.destination_site_code = 'SiteOne'
)
select 'Data …
Run Code Online (Sandbox Code Playgroud)

c# oracle oracle-manageddataaccess

3
推荐指数
1
解决办法
4504
查看次数

如何正确关闭ODP.net连接:dispose()或close()?

这是我的powershell代码:

[void][System.Reflection.Assembly]::LoadFile("C:\DLL\Oracle.ManagedDataAccess.dll")
$OracleConnexion = New-Object Oracle.ManagedDataAccess.Client.OracleConnection('User Id=test;Password="test";Data Source=10.2.2.1/TEST')
$TimeOut = 60

$OracleConnexion.Open()

$Query=$OracleConnexion.CreateCommand()
$Query.CommandText="Select * FROM TEST"
$Query.CommandTimeout = $Timeout

$ExecuteRequete=$Requete.ExecuteReader()

while ($ExecuteRequete.Read()) {

    $SiebelLastRecord += $ExecuteRequete.GetDateTime(0).ToString()

} 

$OracleConnexion.Close()
Run Code Online (Sandbox Code Playgroud)

所以我打开ODP.NET连接$OracleConnexion.open()然后关闭它$OracleConnexion.close()是否足以正确关闭我与Oracle数据库的连接?或者我应该使用$OracleConnexion.Dispose()

我通过任务调度程序每隔5分钟执行一次PowerShell ...所以也许我应该使用Dispose()来避免内存饱和?

c# powershell odp.net powershell-3.0 oracle-manageddataaccess

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

执行与Oracle的连接时,"安全程序包中没有可用的凭据"

在上次Windows更新后,执行与Oracle数据库连接的测试因AuthenticationException而失败.消息和堆栈跟踪如下所示:

    <ErrorInfo>
          <Message>Test method threw exception: 
System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---&gt; Oracle.ManagedDataAccess.Client.OracleException: Oracle Communication: Failed to connect to server or failed to parse connect string ---&gt; OracleInternal.Network.NetworkException: Oracle Communication: Failed to connect to server or failed to parse connect string ---&gt; System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---&gt; System.ComponentModel.Win32Exception: No credentials are available in the security package</Message>
          <StackTrace> 
 --- End of inner exception stack trace ---
    at System.Net.Security.NegoState.StartSendAuthResetSignal(LazyAsyncResult lazyResult, Byte[] message, Exception exception)
   at …
Run Code Online (Sandbox Code Playgroud)

c# oracle database-connection windows-10-desktop oracle-manageddataaccess

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